On Fri, Jul 17, 2015 at 07:34:22PM +0800, Wangnan (F) wrote: > On 2015/7/17 19:21, Wangnan (F) wrote: > >On 2015/7/17 19:06, Peter Zijlstra wrote: > >>On Fri, Jul 17, 2015 at 06:43:33PM +0800, kaixu xia wrote: > >>>diff --git a/kernel/events/core.c b/kernel/events/core.c > >>>index e965cfa..c4e34b7 100644 > >>>--- a/kernel/events/core.c > >>>+++ b/kernel/events/core.c > >>>@@ -8582,6 +8582,28 @@ void perf_event_delayed_put(struct task_struct > >>>*task) > >>> WARN_ON_ONCE(task->perf_event_ctxp[ctxn]); > >>> } > >>> +struct perf_event *perf_event_get(unsigned int fd) > >>>+{ > >>>+ struct perf_event *event; > >>>+ struct fd f; > >>>+ > >>>+ f = fdget(fd); > >>>+ > >>>+ if (!f.file) > >>>+ return ERR_PTR(-EBADF); > >>>+ > >>>+ if (f.file->f_op != &perf_fops) { > >>>+ fdput(f); > >>>+ return ERR_PTR(-EINVAL); > >>>+ } > >>>+ > >>>+ event = f.file->private_data; > >>>+ > >>>+ fdput(f); > >>>+ > >>>+ return event; > >>>+} > >>And what is stopping userspace from closing those FDs while you're using > >>them?
> Shall we put atomic_long_inc_not_zero() between fdget() and fdput()? You pretty much _have_ to do that. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/