If I want to check for overflow, then I should check it before I do
base + incr, not after.
Now that I have no check, I am passing the overflowed base + incr to
brk1(), where it will probably fail the nbreak < segment check.
void *sbrk(int incr)
{
- char *base, *nbreak;
+ char *base;
brk_init();
base = cbreak;
- nbreak = base + incr;
-
- /* Did base + incr overflow? */
- if ((incr < 0 && nbreak > base) ||
- (incr > 0 && nbreak < base)) {
- errno = ENOMEM;
- return (void*)-1;
- }
-
- if (brk1(nbreak) < 0)
+ if (brk1(base + incr) < 0)
return (void*)-1;
return base;
}