On Sun, Dec 13, 2015 at 10:38 PM, Ted Unangst <t...@tedunangst.com> wrote: > Maxim Pugachev wrote: >> Currently two checks in free() function confirm the correctness of >> freedsize argument. I think that it's better to check that provided >> freedsize fall into the same bucket that was recorded in kmemusage >> struct: it covers both cases. > > I don't know. This doesn't seem clearer to me. An error message with > bucket numbers isn't any more helpful.
Ted, thank you for your comments! I can compare the buckets to generate a clearer message, but you're right, it'll look a bit complicated. I've read this code again and I think there is an error in a second check ("size too small"). For example, if freedsize = 2048 and size = 4096, then panic will not fire because "freedsize < size / 2" is false. But I guess it should, because BUCKETINDX(2048) == 11, but BUCKETINDX(4096) == 12. What do you think?