summaryrefslogtreecommitdiffstats
path: root/net/sctp/socket.c
diff options
context:
space:
mode:
authorVlad Yasevich2007-05-23 17:11:37 +0200
committerVladislav Yasevich2007-06-13 22:44:41 +0200
commitfe979ac169970b3d12facd6565766735862395c5 (patch)
tree970e7093b9a86f9c6903871100a10faf62168a58 /net/sctp/socket.c
parent[SCTP]: Allow unspecified port in sctp_bindx() (diff)
downloadkernel-qcow2-linux-fe979ac169970b3d12facd6565766735862395c5.tar.gz
kernel-qcow2-linux-fe979ac169970b3d12facd6565766735862395c5.tar.xz
kernel-qcow2-linux-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.c9
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;