On Tue, 11 Apr 2023 at 15:03, Kal Conley <kal.conley@xxxxxxxxxxx> wrote: > > Remove redundant (base_addr >= pool->addrs_cnt) comparison from the > conditional. > > In particular, addr is computed as: > > addr = base_addr + offset > > where base_addr and offset are stored as 48-bit and 16-bit unsigned > integers, respectively. The above sum cannot overflow u64 since > base_addr has a maximum value of 0x0000ffffffffffff and offset has a > maximum value of 0xffff (implying a maximum sum of 0x000100000000fffe). > Since overflow is impossible, it follows that addr >= base_addr. > > Now if (base_addr >= pool->addrs_cnt), then clearly: > > addr >= base_addr > >= pool->addrs_cnt > > Thus, (base_addr >= pool->addrs_cnt) implies (addr >= pool->addrs_cnt). > Subsequently, the former comparison is unnecessary in the conditional > since for any boolean expressions A and B, (A || B) && (A -> B) is > equivalent to B. Thanks Kal! Just checking again that you ran the xsk selftests on your change and that it passed? If so, here is my ack. Acked-by: Magnus Karlsson <magnus.karlsson@xxxxxxxxx> > Signed-off-by: Kal Conley <kal.conley@xxxxxxxxxxx> > --- > net/xdp/xsk_queue.h | 8 ++------ > 1 file changed, 2 insertions(+), 6 deletions(-) > > diff --git a/net/xdp/xsk_queue.h b/net/xdp/xsk_queue.h > index 66c6f57c9c44..dea4f378327d 100644 > --- a/net/xdp/xsk_queue.h > +++ b/net/xdp/xsk_queue.h > @@ -153,16 +153,12 @@ static inline bool xp_aligned_validate_desc(struct xsk_buff_pool *pool, > static inline bool xp_unaligned_validate_desc(struct xsk_buff_pool *pool, > struct xdp_desc *desc) > { > - u64 addr, base_addr; > - > - base_addr = xp_unaligned_extract_addr(desc->addr); > - addr = xp_unaligned_add_offset_to_addr(desc->addr); > + u64 addr = xp_unaligned_add_offset_to_addr(desc->addr); > > if (desc->len > pool->chunk_size) > return false; > > - if (base_addr >= pool->addrs_cnt || addr >= pool->addrs_cnt || > - addr + desc->len > pool->addrs_cnt || > + if (addr >= pool->addrs_cnt || addr + desc->len > pool->addrs_cnt || > xp_desc_crosses_non_contig_pg(pool, addr, desc->len)) > return false; > > -- > 2.39.2 >