Author: sthibault Date: 2014-08-25 12:29:29 +0000 (Mon, 25 Aug 2014) New Revision: 6247
Added: glibc-package/trunk/debian/patches/hurd-i386/submitted-bind_umask.diff Modified: glibc-package/trunk/debian/changelog glibc-package/trunk/debian/patches/series Log: * patches/hurd-i386/submitted-bind_umask.diff: New patch to fix bind() when umask is 0000, fixes clamav testsuite. Closes: #759218. Modified: glibc-package/trunk/debian/changelog =================================================================== --- glibc-package/trunk/debian/changelog 2014-08-24 20:28:35 UTC (rev 6246) +++ glibc-package/trunk/debian/changelog 2014-08-25 12:29:29 UTC (rev 6247) @@ -16,6 +16,8 @@ std::thread using __pthread_key_create to detect presence of libpthread. Fixes build of webkitgtk and most probably other libstdc++-related failures. + * patches/hurd-i386/submitted-bind_umask.diff: New patch to fix bind() when + umask is 0000, fixes clamav testsuite. Closes: #759218. [ Adam Conrad ] * debian/patches/series: Actually apply the submitted arm64 alignment and Added: glibc-package/trunk/debian/patches/hurd-i386/submitted-bind_umask.diff =================================================================== --- glibc-package/trunk/debian/patches/hurd-i386/submitted-bind_umask.diff (rev 0) +++ glibc-package/trunk/debian/patches/hurd-i386/submitted-bind_umask.diff 2014-08-25 12:29:29 UTC (rev 6247) @@ -0,0 +1,100 @@ +2014-08-25 Samuel Thibault <samuel.thiba...@ens-lyon.org> + + Fix bind when umask is e.g. 0000. + + * sysdeps/mach/hurd/bind.c (__bind): Pass mode 0666 to __dir_mkfile + instead of final mode, so that call __ifsock_getsockaddr can always + succeed, before calling __file_chmod to fix the mode according to umask, + before calling __dir_link to show the file. + +--- + bind.c | 57 ++++++++++++++++++++++++++++++++------------------------- + 1 file changed, 32 insertions(+), 25 deletions(-) + +--- a/sysdeps/mach/hurd/bind.c.orig 2014-08-25 14:11:11.245229537 +0200 ++++ b/sysdeps/mach/hurd/bind.c 2014-08-25 14:11:35.892517639 +0200 +@@ -40,7 +40,7 @@ + char *name = _hurd_sun_path_dupa (addr, len); + /* For the local domain, we must create a node in the filesystem + using the ifsock translator and then fetch the address from it. */ +- file_t dir, node; ++ file_t dir, node, ifsock; + char *n; + + dir = __file_name_split (name, &n); +@@ -48,7 +48,7 @@ + return -1; + + /* Create a new, unlinked node in the target directory. */ +- err = __dir_mkfile (dir, O_CREAT, 0666 & ~_hurd_umask, &node); ++ err = __dir_mkfile (dir, O_CREAT, 0666, &node); + + if (! err) + { +@@ -61,36 +61,43 @@ + MACH_MSG_TYPE_COPY_SEND); + if (! err) + { +- /* Link the node, now a socket, into the target directory. */ +- err = __dir_link (dir, node, n, 1); +- if (err == EEXIST) +- err = EADDRINUSE; ++ enum retry_type doretry; ++ char retryname[1024]; ++ /* Get a port to the ifsock translator. */ ++ err = __dir_lookup(node, "", 0, 0, &doretry, retryname, &ifsock); ++ if (! err) ++ if (doretry != FS_RETRY_NORMAL || retryname[0] != '\0') ++ err = EADDRINUSE; + } +- __mach_port_deallocate (__mach_task_self (), node); + if (! err) + { +- /* Get a port to the ifsock translator. */ +- file_t ifsock = __file_name_lookup_under (dir, n, 0, 0); +- if (ifsock == MACH_PORT_NULL) +- { +- err = errno; +- /* If we failed, get rid of the node we created. */ +- __dir_unlink (dir, n); +- } +- else ++ /* Get the address port. */ ++ err = __ifsock_getsockaddr (ifsock, &aport); ++ if (err == MIG_BAD_ID || err == EOPNOTSUPP) ++ /* We are not talking to /hurd/ifsock. Probably ++ someone came in after we linked our node, unlinked ++ it, and replaced it with a different node, before we ++ did our lookup. Treat it as if our link had failed ++ with EEXIST. */ ++ err = EADDRINUSE; ++ if (! err) + { +- /* Get the address port. */ +- err = __ifsock_getsockaddr (ifsock, &aport); +- if (err == MIG_BAD_ID || err == EOPNOTSUPP) +- /* We are not talking to /hurd/ifsock. Probably +- someone came in after we linked our node, unlinked +- it, and replaced it with a different node, before we +- did our lookup. Treat it as if our link had failed +- with EEXIST. */ +- err = EADDRINUSE; ++ /* Fix the access mode before showing the file. */ ++ err = __file_chmod (node, 0666 & ~_hurd_umask); ++ if (! err) ++ { ++ /* Link the node, now a socket with proper mode, into the ++ * target directory. */ ++ err = __dir_link (dir, node, n, 1); ++ if (err == EEXIST) ++ err = EADDRINUSE; ++ } ++ if (err) ++ __mach_port_deallocate (__mach_task_self (), aport); + } + __mach_port_deallocate (__mach_task_self (), ifsock); + } ++ __mach_port_deallocate (__mach_task_self (), node); + } + __mach_port_deallocate (__mach_task_self (), dir); + Modified: glibc-package/trunk/debian/patches/series =================================================================== --- glibc-package/trunk/debian/patches/series 2014-08-24 20:28:35 UTC (rev 6246) +++ glibc-package/trunk/debian/patches/series 2014-08-25 12:29:29 UTC (rev 6247) @@ -149,6 +149,7 @@ hurd-i386/cvs-munmap-0.diff hurd-i386/cvs-libpthread_guardsize.diff hurd-i386/cvs-libpthread_std_thread.diff +hurd-i386/submitted-bind_umask.diff i386/local-biarch.diff i386/local-cmov.diff -- To UNSUBSCRIBE, email to debian-glibc-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: https://lists.debian.org/e1xltos-0001cx...@moszumanska.debian.org