Skip to content

Commit

Permalink
Fix a use after free bug in kernel->userspace relay file support
Browse files Browse the repository at this point in the history
Coverity spotted what looks like a real possible case of using a variable
after it has been freed.  The problem is in
kernel/relay.c::relay_open_buf()

If the code hits "goto free_buf;" it ends up in this code :

  free_buf:
    	relay_destroy_buf(buf);	<--- calls kfree() on 'buf'.
  free_name:
   	kfree(tmpname);
  end:
  	return buf;		<-- use after free of 'buf'.

I read through the callers and they all handle a NULL return from this
function as an error (and hitting the 'free_buf' label only happens on
failure to chan->cb->create_buf_file(), so that looks like a clear error to
me).

The patch simply sets 'buf' to NULL after the call to
relay_destroy_buf(buf); - as far as I can see that should take care of the
problem.

The patch also corrects a reference to a documentation file while
I was at it.

Note from Mathieu: the documentation reference change should have been
done in a separate patch, but I guess no one will really care.

Signed-off-by: Jesper Juhl <[email protected]>
Acked-by: "David J. Wilder" <[email protected]>
Tested-by: "David J. Wilder" <[email protected]>
Signed-off-by: Mathieu Desnoyers <[email protected]>
Cc: Tom Zanussi <[email protected]>
Cc: Karim Yaghmour <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
Jesper Juhl authored and Linus Torvalds committed Jul 31, 2007
1 parent e804a4a commit c9b3feb
Showing 1 changed file with 2 additions and 1 deletion.
3 changes: 2 additions & 1 deletion kernel/relay.c
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/*
* Public API and common code for kernel->userspace relay file support.
*
* See Documentation/filesystems/relayfs.txt for an overview of relayfs.
* See Documentation/filesystems/relay.txt for an overview.
*
* Copyright (C) 2002-2005 - Tom Zanussi ([email protected]), IBM Corp
* Copyright (C) 1999-2005 - Karim Yaghmour ([email protected])
Expand Down Expand Up @@ -426,6 +426,7 @@ static struct rchan_buf *relay_open_buf(struct rchan *chan, unsigned int cpu)

free_buf:
relay_destroy_buf(buf);
buf = NULL;
free_name:
kfree(tmpname);
end:
Expand Down

0 comments on commit c9b3feb

Please sign in to comment.