tipc: Use size_add() in calls to struct_size()
Subsystems (3)
PATCH 1/1 tipc: Use size_add() in calls to struct_size()
If, for any reason, the open-coded arithmetic causes a wraparound, the protection that struct_size() adds against potential integer overflows is defeated. Fix this by hardening call to struct_size() with size_add().
Fixes e034c6d23bc4 ("tipc: Use struct_size() helper")
Signed-off-by Gustavo A. R. Silva <[email protected]>
--- net/tipc/link.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
net/tipc/link.c +2 -2
@@ -1446,7 +1446,7 @@ u16 tipc_get_gap_ack_blks(struct tipc_gap_ack_blks **ga, struct tipc_link *l, p = (struct tipc_gap_ack_blks *)msg_data (hdr); sz =ntohs (p->len);/* Sanity check */ -if (sz ==struct_size (p, gacks, p->ugack_cnt + p->bgack_cnt)) { +if (sz ==struct_size (p, gacks,size_add (p->ugack_cnt, p->bgack_cnt))) {/* Good, check if the desired type exists */ if ((uc && p->ugack_cnt) || (!uc && p->bgack_cnt)) goto ok;
@@ -1533,7 +1533,7 @@ static u16 tipc_build_gap_ack_blks(struct tipc_link *l, struct tipc_msg *hdr) __tipc_build_gap_ack_blks(ga, l, ga->bgack_cnt) : 0;/* Total len */ - len =struct_size (ga, gacks, ga->bgack_cnt + ga->ugack_cnt); + len =struct_size (ga, gacks,size_add (ga->bgack_cnt, ga->ugack_cnt)); ga->len =htons (len);return len; }
Signature · 1 line
2.34.1
Quoted 7 lines · Gustavo A. R. Silva
If, for any reason, the open-coded arithmetic causes a wraparound, the protection that
struct_size()adds against potential integer overflows is defeated. Fix this by hardening call tostruct_size()withsize_add().Fixes e034c6d23bc4 ("tipc: Use struct_size() helper")Signed-off-by Gustavo A. R. Silva <[email protected]>
Reviewed-by Kees Cook <[email protected]>
Signature · 1 line
Kees Cook