Skip to content

Commit

Permalink
vc: BlockIndex should not be altered in case of error
Browse files Browse the repository at this point in the history
BlockIndex should not increment in case of error.

Similar issue applies to decrementSandboxBlockIndex where the symptom may be more severe - in worst case, the block index may become negative.

Fixes kata-containers#2244

Signed-off-by: Ted Yu <yuzhihong@gmail.com>
  • Loading branch information
yutedz committed Nov 21, 2019
1 parent a17ca14 commit c833ac2
Showing 1 changed file with 14 additions and 1 deletion.
15 changes: 14 additions & 1 deletion virtcontainers/sandbox.go
Original file line number Diff line number Diff line change
Expand Up @@ -1686,6 +1686,12 @@ func (s *Sandbox) resumeSetStates() error {
// block device is assigned to a container in the sandbox.
func (s *Sandbox) getAndSetSandboxBlockIndex() (int, error) {
currentIndex := s.state.BlockIndex
var err error
defer func() {
if err != nil {
s.state.BlockIndex = currentIndex
}
}()

// Increment so that container gets incremented block index
s.state.BlockIndex++
Expand All @@ -1704,12 +1710,19 @@ func (s *Sandbox) getAndSetSandboxBlockIndex() (int, error) {
// decrementSandboxBlockIndex decrements the current sandbox block index.
// This is used to recover from failure while adding a block device.
func (s *Sandbox) decrementSandboxBlockIndex() error {
var err error
original := s.state.BlockIndex
s.state.BlockIndex--
defer func() {
if err != nil {
s.state.BlockIndex = original
}
}()

if !s.supportNewStore() {
// experimental runtime use "persist.json" which doesn't need "state.json" anymore
// update on-disk state
if err := s.store.Store(store.State, s.state); err != nil {
if err = s.store.Store(store.State, s.state); err != nil {
return err
}
}
Expand Down

0 comments on commit c833ac2

Please sign in to comment.