mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-24 14:00:30 +00:00
Use unsigned constants for ICMP6 filters [BZ #22489]
The core problem here is that the filter array elements are unsigned but the computed constants are signed. This both causes a signededness conversion at the &= step and may cause undefined behavior if the MSB is being modified. This patch uses unsigned constants to avoid both cases. - DJ
This commit is contained in:
parent
6fcb0272f7
commit
c2d0411488
@ -85,16 +85,16 @@ struct icmp6_hdr
|
|||||||
#define ICMP6_PARAMPROB_OPTION 2 /* unrecognized IPv6 option */
|
#define ICMP6_PARAMPROB_OPTION 2 /* unrecognized IPv6 option */
|
||||||
|
|
||||||
#define ICMP6_FILTER_WILLPASS(type, filterp) \
|
#define ICMP6_FILTER_WILLPASS(type, filterp) \
|
||||||
((((filterp)->icmp6_filt[(type) >> 5]) & (1 << ((type) & 31))) == 0)
|
((((filterp)->icmp6_filt[(type) >> 5]) & (1U << ((type) & 31))) == 0)
|
||||||
|
|
||||||
#define ICMP6_FILTER_WILLBLOCK(type, filterp) \
|
#define ICMP6_FILTER_WILLBLOCK(type, filterp) \
|
||||||
((((filterp)->icmp6_filt[(type) >> 5]) & (1 << ((type) & 31))) != 0)
|
((((filterp)->icmp6_filt[(type) >> 5]) & (1U << ((type) & 31))) != 0)
|
||||||
|
|
||||||
#define ICMP6_FILTER_SETPASS(type, filterp) \
|
#define ICMP6_FILTER_SETPASS(type, filterp) \
|
||||||
((((filterp)->icmp6_filt[(type) >> 5]) &= ~(1 << ((type) & 31))))
|
((((filterp)->icmp6_filt[(type) >> 5]) &= ~(1U << ((type) & 31))))
|
||||||
|
|
||||||
#define ICMP6_FILTER_SETBLOCK(type, filterp) \
|
#define ICMP6_FILTER_SETBLOCK(type, filterp) \
|
||||||
((((filterp)->icmp6_filt[(type) >> 5]) |= (1 << ((type) & 31))))
|
((((filterp)->icmp6_filt[(type) >> 5]) |= (1U << ((type) & 31))))
|
||||||
|
|
||||||
#define ICMP6_FILTER_SETPASSALL(filterp) \
|
#define ICMP6_FILTER_SETPASSALL(filterp) \
|
||||||
memset (filterp, 0, sizeof (struct icmp6_filter));
|
memset (filterp, 0, sizeof (struct icmp6_filter));
|
||||||
|
Loading…
Reference in New Issue
Block a user