On Tue, 2016-08-30 at 22:33 +0200, Marcin Szewczyk wrote: > Hi, > > the wheezy kernel upgrade from 3.2.78-1 to 3.2.81-1 added the SETFL > fcntl support code (#627782) which unfortunately results in a kernel > Oops when the fcntl is called on a directory. This breaks e.g. copying > files from an AUFS filesystem on a remote machine using scp. > > Minimal code to reproduce the problem: > #v+ > #include <stdio.h> > #include <stdlib.h> > #include <fcntl.h> > > int main (int argc, char **argv) { > const char *fname = NULL; > int fd; > if (argc != 2) > exit (1); > fname = argv[1]; > fd = open (fname, O_RDONLY|O_NONBLOCK); > printf ("fd %d\n", fd); > fcntl (fd, F_SETFL, O_RDONLY); > return 0; > } > #v- > > Call the program on regular a file (nothing happens) and then on a > directory (Oops). > > The Oops happens in fs/fcntl.c: > #v+ > if (!error && filp->f_op->owner && > !strcmp(filp->f_op->owner->name, "aufs") && > strstr(filp->f_op->owner->version, "+setfl")) > error = filp->f_op->setfl(filp, arg); > #v- > > > > > From fs/aufs/inode.c: > #v+ > case S_IFREG: > [...] > inode->i_fop = &aufs_file_fop; > [...] > case S_IFDIR: > [...] > inode->i_fop = &aufs_dir_fop; > #v- > > The aufs_file_fop structure sets the value of the .setfl member to > aufs_setfl (f_op.c). aufs_dir_fop (dir.c) on the other hand does not. Thanks for finding this; I'll fix it. [...] > BTW, changelog link on the package's page[1] is dead. [...] This is unfortunately true for all packages updated in wheezy-security since the last point release. (And generally true for security updates, but then only until they get copied into the main archive.) Ben. -- Ben Hutchings Anthony's Law of Force: Don't force it, get a larger hammer.
Attachment:
signature.asc
Description: This is a digitally signed message part