projects
/
openwrt
/
staging
/
blogic.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
018349d
)
net/appletalk: fix minor pointer leak to userspace in SIOCFINDIPDDPRT
author
Willy Tarreau
<
[email protected]
>
Wed, 12 Sep 2018 05:36:35 +0000
(07:36 +0200)
committer
David S. Miller
<
[email protected]
>
Thu, 13 Sep 2018 17:35:57 +0000
(10:35 -0700)
Fields ->dev and ->next of struct ipddp_route may be copied to
userspace on the SIOCFINDIPDDPRT ioctl. This is only accessible
to CAP_NET_ADMIN though. Let's manually copy the relevant fields
instead of using memcpy().
BugLink:
http://blog.infosectcbr.com.au/2018/09/linux-kernel-infoleaks.html
Cc: Jann Horn <
[email protected]
>
Signed-off-by: Willy Tarreau <
[email protected]
>
Signed-off-by: David S. Miller <
[email protected]
>
drivers/net/appletalk/ipddp.c
patch
|
blob
|
history
diff --git
a/drivers/net/appletalk/ipddp.c
b/drivers/net/appletalk/ipddp.c
index 9375cef2242053c1f1ade3323d04d7dd4bea77af..3d27616d9c85540304a8d78c4a2f050c0866b9a2 100644
(file)
--- a/
drivers/net/appletalk/ipddp.c
+++ b/
drivers/net/appletalk/ipddp.c
@@
-283,8
+283,12
@@
static int ipddp_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
case SIOCFINDIPDDPRT:
spin_lock_bh(&ipddp_route_lock);
rp = __ipddp_find_route(&rcp);
- if (rp)
- memcpy(&rcp2, rp, sizeof(rcp2));
+ if (rp) {
+ memset(&rcp2, 0, sizeof(rcp2));
+ rcp2.ip = rp->ip;
+ rcp2.at = rp->at;
+ rcp2.flags = rp->flags;
+ }
spin_unlock_bh(&ipddp_route_lock);
if (rp) {