bonding: prevent out of bound accesses
ether_addr_equal_64bits() requires some care about its arguments, namely that 8 bytes might be read, even if last 2 byte values are not used. KASan detected a violation with null_mac_addr and lacpdu_mcast_addr in bond_3ad.c Same problem with mac_bcast[] and mac_v6_allmcast[] in bond_alb.c : Although the 8-byte alignment was there, KASan would detect out of bound accesses. Fixes:815117adaf
("bonding: use ether_addr_equal_unaligned for bond addr compare") Fixes:bb54e58929
("bonding: Verify RX LACPDU has proper dest mac-addr") Fixes:885a136c52
("bonding: use compare_ether_addr_64bits() in ALB") Signed-off-by: Eric Dumazet <edumazet@google.com> Reported-by: Dmitry Vyukov <dvyukov@google.com> Acked-by: Dmitry Vyukov <dvyukov@google.com> Acked-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com> Acked-by: Ding Tianhong <dingtianhong@huawei.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
3d8c4530e5
commit
f87fda00b6
@@ -34,6 +34,9 @@
|
||||
|
||||
#define BOND_DEFAULT_MIIMON 100
|
||||
|
||||
#ifndef __long_aligned
|
||||
#define __long_aligned __attribute__((aligned((sizeof(long)))))
|
||||
#endif
|
||||
/*
|
||||
* Less bad way to call ioctl from within the kernel; this needs to be
|
||||
* done some other way to get the call out of interrupt context.
|
||||
@@ -138,7 +141,9 @@ struct bond_params {
|
||||
struct reciprocal_value reciprocal_packets_per_slave;
|
||||
u16 ad_actor_sys_prio;
|
||||
u16 ad_user_port_key;
|
||||
u8 ad_actor_system[ETH_ALEN];
|
||||
|
||||
/* 2 bytes of padding : see ether_addr_equal_64bits() */
|
||||
u8 ad_actor_system[ETH_ALEN + 2];
|
||||
};
|
||||
|
||||
struct bond_parm_tbl {
|
||||
|
Reference in New Issue
Block a user