lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Tue, 06 Jul 2010 05:56:20 +0200 From: Eric Dumazet <eric.dumazet@...il.com> To: Changli Gao <xiaosuo@...il.com> Cc: Jens Axboe <axboe@...nel.dk>, Ofer Heifetz <oferh@...vell.com>, "netdev@...r.kernel.org" <netdev@...r.kernel.org> Subject: Re: Splice status Le mardi 06 juillet 2010 à 10:01 +0800, Changli Gao a écrit : > On Mon, Jul 5, 2010 at 8:50 PM, Eric Dumazet <eric.dumazet@...il.com> wrote: > > Le lundi 05 juillet 2010 à 13:52 +0300, Ofer Heifetz a écrit : > >> I am using Samba, so from my understanding of the source code, it > > loops and performs splice(sock, pipe) and splice(pipe, fd). There is no > > flush of any sort in between. > >> > >> When you say drain you mean to flush all data to pipe? > >> > > > > Draining pipe before splice() call would only trigger the bug less > > often. > > If we don't drain the pipe before calling splice(2), the data spliced > from pipe maybe not be what we expect. Then data corruption occurs. > This is not true. A pipe is a pipe is a buffer. You dont need it to be empty when using it. Nowhere in documentation its stated. However, a single skb can fill a pipe, even if "its empty" > > > > splice(sock, pipe) can block if caller dont use appropriate "non > > blocking pipe' splice() mode, even if pipe is empty before a splice() > > call. > > I don't think it is expected. The code of sys_recvfile is much like > the sendfile(2) implementation in kernel. If sys_recvfile may block > without non_block flag, sendfile(2) may block too. Then it would be a bug. You might fix it easily. Using splice() correctly (ie, not blocking on sock->pipe) should work too. Again, you can block on splice(sock, pipe), iff you have a second thread doing the opposite (pipe->file) in parallel to unblock you. But samba recvfile algo is using a single thread. > > BTW: Samba can use sendfile(2) instead in sys_recvfile. > -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists