On Thu, May 30, 2024 at 04:15:51PM +0200, Thorsten Blum wrote: > Hi Dan, > > On 27. May 2024, at 12:38, Dan Carpenter <dan.carpenter@xxxxxxxxxx> wrote: > > Also this check isn't great: > > > > if (dev->policy_sz < header->length + 512) > > > > header->length is a u32 that comes from the user, so the addition can > > overflow. I can't immediately see how to exploit this though since we > > don't seem to use header->length after this (by itself). > > How about > > if (header->length > U32_MAX - 512 || dev->policy_sz < header->length + 512) > return -EINVAL; > > to prevent a possible overflow? I've been thinking about this and actually we could do something simpler: if (dev->policy_sz < size_add(header->length, 512)) { > > header->length is used in the next line > > dev->policy_sz = header->length + 512; Yeah, but it's not used by itself. The "header->length + 512" has been verified as a valid value whether it overflows or not. Only "header->length" is wrong. > > and if the addition overflows, we end up setting dev->policy_sz to an > invalid value. regards, dan carpenter