History

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse

Pull fuse fixes from Miklos Szeredi: "Fix a use after free bug introduced in 4.2 and using an uninitialized value introduced in 4.9" * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse: fuse: fix uninitialized flags in pipe_buffer fuse: fix use after free issue in fuse_dev_do_read()

Linus Torvalds committed 9 years ago

Commit 58f6eae2 parents aa6fba5 84588a91 file · +5 −0Browse files

Unified · Split

fs/fuse/dev.c+5−0
@@ -399,6 +399,10 @@ static void request_end(struct fuse_conn *fc, struct fuse_req *req) · 398 unmodified lines
399399 static void queue_interrupt(struct fuse_iqueue *fiq, struct fuse_req *req)
400400 {
401401 spin_lock(&fiq->waitq.lock);
402+ if (test_bit(FR_FINISHED, &req->flags)) {
403+ spin_unlock(&fiq->waitq.lock);
404+ return;
405+ }
402406 if (list_empty(&req->intr_entry)) {
403407 list_add_tail(&req->intr_entry, &fiq->interrupts);
404408 wake_up_locked(&fiq->waitq);
@@ -1372,6 +1376,7 @@ static ssize_t fuse_dev_splice_read(struct file *in, loff_t *ppos, · 967 unmodified lines
13721376 * code can Oops if the buffer persists after module unload.
13731377 */
13741378 bufs[page_nr].ops = &nosteal_pipe_buf_ops;
1379+ bufs[page_nr].flags = 0;
13751380 ret = add_to_pipe(pipe, &bufs[page_nr++]);
13761381 if (unlikely(ret < 0))
13771382 break;