Package: qemu-utils
Version: 1:2.1+dfsg-12+deb8u6
Severity: normal

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=829401

The report I sent this against package linux-image-4.5.0-2-grsec-amd64 breaks qemu-nbd's ability to work with max_part. Since the kernel team is unwillingly to bother about it because they have to try commands with "qemu-nbd", they are unwilling to look into it.

Here I've tried 4 kernels, the ones that are output with dpkg -l has been tried. The excuse the kernel team gives about "grsec/non-grsec" is a mere distration. The bug occurs whether the kernel has grsec built into it or not, but it occurs against the kernel package it is report against. They're just unwillingly to bother about it.

My observation is "qemu-nbd" (latest 1:2.5) or "1:2.1" both work fine and exhibit the same "bug" for kernels above 4.3


"
kernels 4.5 and 4.6 breaks qemu-nbd from mapping partitions.

"qemu-nbd can map partitions from VM images and raw disk images to /dev/nbdNpM nodes, but proper module options have to be loaded prior so that qemu-nbd performs these additional mappings (the general consensus around mapping image files has users issuing "kpartx -a /dev/<device>", but kpartx is not needed at all after issuing qemu-nbd)

nothing is specially set up other than a module option file and that's pretty much it -- there's just 2 or 3 commands for the testing --- all which indicates the issue is more towards kernel than it is with qemu-nbd.

after a modprobe nbd is issued, there is no "/dev/nbd0p1"-like devices, so the main problem with kernels 4.5/4.6 is that qemu-nbd is not being allowed to generate any device nodes. ("partition" device nodes that is -- "/dev/nbd0" and "/dev/nbd1" nodes are generated by modprobe nbd)

here in nbd(module) options, there is a hint for max_part that needs to be specified in order for qemu-nbd to later work in generating the partition devices /dev/nbdNpM.
(nbds_max=2 just means for modprobe to create "/dev/nbd0" and "/dev/nbd1")

/etc/modprobe.d/mynbd.conf
"
options nbd nbds_max=2 max_part=10
"

basically just a raw disk image containing one partition

dd if=/dev/zero of=1.bin bs=10M count=10
,creates a raw diskimage called 1.bin

any tool to create a dosmbr table containing at least 1 partition (qemu-nbd can also work with GPT tables but it is not used)
cfdisk 1.bin , and exit the partition tool

no mkfs is needed, so one can immediately try to map the partitions from the disk image 1.bin just by using qemu-nbd (here again "kpartx" is not used at all. If one uses "kpartx", then it would rather create partition device nodes in /dev/mapper. Using qemu-nbd -d [/dev/nbdN] also unmaps partition nodes.. so forgetting to issue kpartx -d /dev/nbd0 prior qemu-nbd -d, would leave a mess of broken device links in /dev/mapper)

qemu-nbd should map 1.bin to /dev/nbd0 and its first partition to "/dev/nbd0p1". this partition device node does not exist yet but is something that qemu-nbd would generate

"qemu-nbd -c /dev/nbd0 1.bin"

there is an option "-P "(qemu-nbd command) for specifying an exposure to a single partition, but this has null effect
" -P, --partition=num
only expose partition I<num>"

it is always "qemu-nbd -c /dev/nbd0 [IMAGE FILE]" that works (and after max_part is used with "modprobe nbd") -- the /dev/nbd0p1 node then gets generated... so something is up with the later kernels in breaking this particular behaviour feature on behalf of qemu-nbd

Here the qemu-utils was updated and still no success...dmesg shows no errors... there's also no errors from qemu-nbd's output but there is a new notice about using "-f raw" for more safety for the end-user.

... the outcome is still the same (with or without "-f raw") -- the end result is the image file is still treated as a "raw disk" which is correct but there is no generation of partition devices

some output for the report,

modprobe -vvv nbd
insmod /lib/modules/4.5.0-2-grsec-amd64/kernel/drivers/block/nbd.ko nbds_max=20 max_part=10 modprobe: DEBUG: ../libkmod/libkmod-module.c:728 kmod_module_get_path() name='nbd' path='/lib/modules/4.5.0-2-grsec-amd64/kernel/drivers/block/nbd.ko'

dpkg -l 'linux-image*'
ii linux-image-4.5.0-0.bpo.2-amd64 4.5.4-1~bpo8+1 amd64 Linux 4.5 for 64-bit PCs ii linux-image-4.5.0-2-grsec-amd64 4.5.7-1+grsec201606222150+1~bpo8+1 amd64 Linux 4.5 for 64-bit PCs, Grsecurity protection ii linux-image-4.6.0-0.bpo.1-amd64 4.6.1-1~bpo8+1 amd64 Linux 4.6 for 64-bit PCs

apt-cache policy qemu-utils
qemu-utils:
Installed: 1:2.1+dfsg-12+deb8u6
Candidate: 1:2.1+dfsg-12+deb8u6
Version table:
1:2.5+dfsg-4~bpo8+1 0
100 http://debian.bhs.mirrors.ovh.net/debian/ jessie-backports/main amd64 Packages
*** 1:2.1+dfsg-12+deb8u6 0
500 http://debian.bhs.mirrors.ovh.net/debian/ jessie/main amd64 Packages
500 http://security.debian.org/ jessie/updates/main amd64 Packages
100 /var/lib/dpkg/status

linux-image-4.3.0-0.bpo.1-amd64 4.3.5-1~bpo8+1

latest kernel that works is 4.3, though i don't have access to a 4.4 kernel, i can't tell when between 4.3 and 4.5 qemu-nbd started to fail
"

Reply via email to