Re: [PATCH v6 1/4] sgl_alloc_order: remove 4 GiB limit, sgl_free() warning

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 19.01.21 19:17, Jason Gunthorpe wrote:
On Tue, Jan 19, 2021 at 07:08:32PM +0100, Bodo Stroesser wrote:
On 19.01.21 19:03, Jason Gunthorpe wrote:
On Tue, Jan 19, 2021 at 06:24:49PM +0100, Bodo Stroesser wrote:

I had a second look into math.h, but I don't find any reason why round_up
could overflow. Can you give a hint please?

#define round_up(x, y) ((((x)-1) | __round_mask(x, y))+1)
                                                      ^^^^^

That +1 can overflow

But that would be a unsigned long long overflow. I considered this to
not be relevant.

Why not? It still makes nents 0 and still causes a bad bug


Generally spoken, you of course are right.

OTOH, if someone tries to allocate such big sgls, then we will run into
trouble during memory allocation even without overrun.

Anyway, if we first calculate nent and nalloc and then check with

	if ((unsigned long long)nalloc << (PAGE_SHIFT + order) < length)
		return NULL;

I think we would have checked against all kind of overrun in a single
step. Or am I missing something?

Bodo





[Index of Archives]     [Linux SCSI]     [Kernel Newbies]     [Linux SCSI Target Infrastructure]     [Share Photos]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Device Mapper]

  Powered by Linux