[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: trixie: cdrecord can no longer write to CD



Hi,

jumping ahead:

The wodim --devices bug has nothing to do with the problems of
D. R. Evans with K3B and the resulting need for the setuid bit with
wodim.

The --devices bug is rather due to a failed attempt to rename /dev/sr
to /dev/scd about 25 years ago, plus a mistaken piece of code in wodim
which since Linux 3.0 sporadically falls back to the code for pre-2.6.

When wodim believes to run on Linux >= 2.6 it enumerates and examines
only the /dev/scd* device files, which died out about 15 years ago.
So it fails to find any drive.
When it believes to run on Linux < 2.6 it enumerates /dev/sg* which
still exists in Linux 6.x. So the drives of such a system get found.

Debian 12 is perceived as pre-2.6, my Sid is perveived as 2.6 or later.
Sid's wodim works and finds the emulated DVD drive after
  ln -s /dev/sr0 /dev/scd0


Max Nikulin wrote:
> Is there anything interesting in call stacks?
>    strace -k -e trace=openat wodim --devices

Indirectly this brought the solution for the path display problem.
It works fine for the superuser.

With above strace run as normal user i only get an error message
together with each line:

  openat(AT_FDCWD, 0x7fff596d83e0, O_RDWR|O_EXCL|O_NONBLOCK) = -1 ENOENT (No such file or directory)
  strace: fopen: /proc/1188/maps: Permission denied

This error message was not emitted by the previously tried runs .

So i retried as classical superuser (su -). This gave me an
avalanche of line blocks like this 

  openat(AT_FDCWD, "/dev/hda", O_RDWR|O_EXCL|O_NONBLOCK) = -1 ENOENT (No such file or directory)
  > /usr/lib/x86_64-linux-gnu/libc.so.6(__internal_syscall_cancel+0x67) [0x8f687]
  > /usr/lib/x86_64-linux-gnu/libc.so.6(__syscall_cancel+0xd) [0x8f6ad]
  > /usr/lib/x86_64-linux-gnu/libc.so.6(__libc_open64+0x4d) [0x1037bd]
  > /usr/bin/wodim(sg_open_excl+0x48) [0x398c8]
  > /usr/bin/wodim() [0x39d2c]
  > /usr/bin/wodim(usal__open+0x41) [0x32cc1]
  > /usr/bin/wodim(usal_open+0x188) [0x326f8]
  > /usr/bin/wodim(main+0x3c9) [0x12b49]
  > /usr/lib/x86_64-linux-gnu/libc.so.6(__libc_start_call_main+0x78) [0x29ca8]
  > /usr/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main_alias_2+0x85) [0x29d65]
  > /usr/bin/wodim(_start+0x21) [0x16c21]

The stack trace tells me that i was not so wrong with usal_open()
being involved.

The older among the readers might remember /dev/hda and its faithful
slave /dev/hdb. Back in the uncivilized days of IDE when either the
boss worked or the slave, but never both.

The list of failed calls from strace without options is:

  access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
  prctl(PR_CAPBSET_READ, 0x30 /* CAP_??? */) = -1 EINVAL (Invalid argument)
  prctl(PR_CAPBSET_READ, 0x2c /* CAP_??? */) = -1 EINVAL (Invalid argument)
  prctl(PR_CAPBSET_READ, 0x2a /* CAP_??? */) = -1 EINVAL (Invalid argument)
  prctl(PR_CAPBSET_READ, 0x29 /* CAP_??? */) = -1 EINVAL (Invalid argument)
  openat(AT_FDCWD, "/dev/hda", O_RDWR|O_EXCL|O_NONBLOCK) = -1 ENOENT (No such file or directory)
  ...
  openat(AT_FDCWD, "/dev/hdz", O_RDWR|O_EXCL|O_NONBLOCK) = -1 ENOENT (No such file or directory)
  openat(AT_FDCWD, "/dev/scd0", O_RDWR|O_EXCL|O_NONBLOCK) = -1 ENOENT (No such file or directory)
  ...
  openat(AT_FDCWD, "/dev/scd255", O_RDWR|O_EXCL|O_NONBLOCK) = -1 ENOENT (No such file or directory)

Soon after /dev/scd255 the run ends with

  write(2, "wodim: No such file or directory"..., 34wodim: No such file or directory. ) = 34
  write(2, "\nCannot open SCSI driver!\nFor po"..., 128

It looks only for two dinosaurs of optical drive device file history.

On Debian 12 it looks for /dev/hda[a-z] and /dev/sg0 to /dev/sg255.
The emulated DVD-ROM is found as /dev/sg1.

The source
  https://sources.debian.org/src/cdrkit/9%3A1.1.11-5/libusal/scsi-linux-sg.c#L517
looks like the difference is the outcome of call check_linux_26().

My Sid is assessed as Linux >= 2.6 because of the major kernel version
6 being larger than 1 and the minor version 16 being >= 6.
  https://sources.debian.org/src/cdrkit/9%3A1.1.11-5/libusal/scsi-linux-sg.c#L251
  $ uname -r
  6.16.5+deb14-amd64
My Debian 12 has
  6.1.0-21-amd64
so that the minor version is not high enough for being 2.6.

This means that the --devices bug appears and vanishes with kernel
versions. 6.1 of Debian 12 inspects /dev/sg. 6.16 of my Sid looks for
/dev/scd. All look for /dev/hd. None looks for /dev/sr.

This also means that the --devices bug is not related to the problems
of D. R. Evans with K3B and the resulting need for the setuid bit with
wodim.
I cannot test whether K3B would like my headless Sid's wodim without
setuid bit.


Have a nice day :)

Thomas


Reply to: