From: Linus Torvalds Date: Fri, 26 Apr 2019 18:09:55 +0000 (-0700) Subject: Merge tag 'trace-v5.1-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt... X-Git-Tag: v5.1-rc7~13 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=e9e1a2e7b486e3940badb6d743c8841ed94517b6;p=users%2Fhch%2Fuuid.git Merge tag 'trace-v5.1-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace Pull tracing fixes from Steven Rostedt: "Three tracing fixes: - Use "nosteal" for ring buffer splice pages - Memory leak fix in error path of trace_pid_write() - Fix preempt_enable_no_resched() (use preempt_enable()) in ring buffer code" * tag 'trace-v5.1-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-trace: trace: Fix preempt_enable_no_resched() abuse tracing: Fix a memory leak by early error exit in trace_pid_write() tracing: Fix buffer_ref pipe ops --- e9e1a2e7b486e3940badb6d743c8841ed94517b6 diff --cc include/linux/pipe_fs_i.h index abb2dac3da9b,a830e9a00eb9..5c626fdc10db --- a/include/linux/pipe_fs_i.h +++ b/include/linux/pipe_fs_i.h @@@ -173,9 -171,10 +173,10 @@@ struct pipe_inode_info *alloc_pipe_info void free_pipe_info(struct pipe_inode_info *); /* Generic pipe buffer ops functions */ -void generic_pipe_buf_get(struct pipe_inode_info *, struct pipe_buffer *); +bool generic_pipe_buf_get(struct pipe_inode_info *, struct pipe_buffer *); int generic_pipe_buf_confirm(struct pipe_inode_info *, struct pipe_buffer *); int generic_pipe_buf_steal(struct pipe_inode_info *, struct pipe_buffer *); + int generic_pipe_buf_nosteal(struct pipe_inode_info *, struct pipe_buffer *); void generic_pipe_buf_release(struct pipe_inode_info *, struct pipe_buffer *); void pipe_buf_mark_unmergeable(struct pipe_buffer *buf); diff --cc kernel/trace/trace.c index 6c24755655c7,46f68fad6373..ca1ee656d6d8 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@@ -7046,11 -7053,7 +7053,11 @@@ static bool buffer_pipe_buf_get(struct { struct buffer_ref *ref = (struct buffer_ref *)buf->private; - if (ref->ref > INT_MAX/2) ++ if (refcount_read(&ref->refcount) > INT_MAX/2) + return false; + - ref->ref++; + refcount_inc(&ref->refcount); + return true; } /* Pipe buffer operations for a buffer. */