containers/storage

composefs: podman pull multiple: panic, integer divide by zero

edsantiago opened this issue · 2 comments

Not 100% reproducible, but eventually with enough images:

# bin/podman pull quay.io/libpod/redis:alpine
Trying to pull quay.io/libpod/redis:alpine...
Getting image source signatures
Copying blob 75cca444dec7 done  414.0b / 414.0b (skipped: 0.0b = 0.00%)
Copying blob 188c0c94c7c5 done  2.7MiB / 2.7MiB (skipped: 0.0b = 0.00%)
Copying blob fb6015f7c791 done  1.2KiB / 1.2KiB (skipped: 0.0b = 0.00%)
Copying blob f8890a096979 done  250.5KiB / 250.5KiB (skipped: 0.0b = 0.00%)
Copying blob 1ab9e54597f5 done  7.1MiB / 7.1MiB (skipped: 0.0b = 0.00%)
Copying blob aea83659e879 done  100.0b / 100.0b (skipped: 0.0b = 0.00%)
Copying config 8835e6aeca done   | 
Writing manifest to image destination
8835e6aeca9938e066a56ef1b6668b750804476124f42302447fe5711dce55de


# bin/podman pull quay.io/libpod/alpine:latest
Trying to pull quay.io/libpod/alpine:latest...
Getting image source signatures
Copying blob 9d16cba9fb96 done  2.8MiB / 2.8MiB (skipped: 0.0b = 0.00%)
panic: runtime error: integer divide by zero

goroutine 109 [running]:
github.com/containers/storage/pkg/chunked.(*bloomFilter).hashFn(0x7?, {0xc0022ff230, 0x27, 0x27}, 0x27?)
        /root/go/podman/vendor/github.com/containers/storage/pkg/chunked/bloom_filter.go:35 +0xf8
github.com/containers/storage/pkg/chunked.(*bloomFilter).maybeContains(0xc0002bc2c0, {0xc0022ff230, 0x27, 0x27})
        /root/go/podman/vendor/github.com/containers/storage/pkg/chunked/bloom_filter.go:48 +0x57
github.com/containers/storage/pkg/chunked.(*layersCache).findDigestInternal(0xc0008f8660, {0xc000232280?, 0xc0008d6e18?})
        /root/go/podman/vendor/github.com/containers/storage/pkg/chunked/cache_linux.go:759 +0x21b
github.com/containers/storage/pkg/chunked.(*layersCache).findFileInOtherLayers(0xc000613ba0?, 0x410e00?, 0xa0?)
        /root/go/podman/vendor/github.com/containers/storage/pkg/chunked/cache_linux.go:803 +0x4c
github.com/containers/storage/pkg/chunked.findFileInOtherLayers(0x0?, 0x200?, 0x200?, 0x38?)
        /root/go/podman/vendor/github.com/containers/storage/pkg/chunked/storage_linux.go:511 +0x25
github.com/containers/storage/pkg/chunked.(*chunkedDiffer).findAndCopyFile(0xc0008fc0f0?, 0xb, 0xc000220000, 0xc002166390, 0x512000?)
        /root/go/podman/vendor/github.com/containers/storage/pkg/chunked/storage_linux.go:1550 +0x74
github.com/containers/storage/pkg/chunked.(*chunkedDiffer).ApplyDiff.func4()
        /root/go/podman/vendor/github.com/containers/storage/pkg/chunked/storage_linux.go:1855 +0x18c
created by github.com/containers/storage/pkg/chunked.(*chunkedDiffer).ApplyDiff in goroutine 67
        /root/go/podman/vendor/github.com/containers/storage/pkg/chunked/storage_linux.go:1852 +0x1a07

Setup:

  • podman @ main (currently 7986eeaf6a8c06bc4672f6bc8790c93483dcda5d)
  • vendor in containers-storage @ main (should give you v1.53.1-0.20240420103332-243179932739 which includes #1893)
  • /etc/containers/storage.conf as follows:
[storage]
driver = "overlay"
runroot = "/run/containers/storage"
graphroot = "/var/lib/containers/storage"

[storage.options]
pull_options = {enable_partial_images = "true", use_hard_links = "false", ostree_repos="", convert_images = "true"}

[storage.options.overlay]
use_composefs = "true"

It's very possible that I did something wrong when I vendored c-storage, like missing some important new step needed by #1893

thanks, opened a PR: #1904