diff options
author | Vlad Yasevich <vladislav.yasevich@hp.com> | 2007-05-23 11:11:37 -0400 |
---|---|---|
committer | Vladislav Yasevich <vxy@hera.kernel.org> | 2007-06-13 20:44:41 +0000 |
commit | fe979ac169970b3d12facd6565766735862395c5 (patch) | |
tree | 970e7093b9a86f9c6903871100a10faf62168a58 /net/sctp/socket.c | |
parent | 8b35805693e1915829355723537f99f1b8bc9cc0 (diff) | |
download | lwn-fe979ac169970b3d12facd6565766735862395c5.tar.gz lwn-fe979ac169970b3d12facd6565766735862395c5.zip |
[SCTP] Fix leak in sctp_getsockopt_local_addrs when copy_to_user fails
If the copy_to_user or copy_user calls fail in sctp_getsockopt_local_addrs(),
the function should free locally allocated storage before returning error.
Spotted by Coverity.
Signed-off-by: Vlad Yasevich <vladislav.yasevich@hp.com>
Acked-by: Sridhar Samudrala <sri@us.ibm.com>
Diffstat (limited to 'net/sctp/socket.c')
-rw-r--r-- | net/sctp/socket.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/net/sctp/socket.c b/net/sctp/socket.c index a5b6e559451e..45510c46c223 100644 --- a/net/sctp/socket.c +++ b/net/sctp/socket.c @@ -4352,11 +4352,12 @@ copy_getaddrs: err = -EFAULT; goto error; } - if (put_user(cnt, &((struct sctp_getaddrs __user *)optval)->addr_num)) - return -EFAULT; + if (put_user(cnt, &((struct sctp_getaddrs __user *)optval)->addr_num)) { + err = -EFAULT; + goto error; + } if (put_user(bytes_copied, optlen)) - return -EFAULT; - + err = -EFAULT; error: kfree(addrs); return err; |