Date: Thu, 31 Aug 2000 17:35:02 -0700 From: Don Lewis <Don.Lewis@tsc.tdk.com> To: Brian Fundakowski Feldman <green@FreeBSD.ORG>, Don Lewis <Don.Lewis@tsc.tdk.com> Cc: freebsd-stable@FreeBSD.ORG Subject: Re: 4.1 STABLE broken since today! Message-ID: <200009010035.RAA10986@salsa.gv.tsc.tdk.com> In-Reply-To: <Pine.BSF.4.21.0008311915530.17114-100000@green.dyndns.org> References: <Pine.BSF.4.21.0008311915530.17114-100000@green.dyndns.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Aug 31, 7:25pm, Brian Fundakowski Feldman wrote:
} Subject: Re: 4.1 STABLE broken since today!
} On Thu, 31 Aug 2000, Don Lewis wrote:
}
} > On Aug 31, 6:11am, Tor.Egge@fast.no wrote:
} > } Subject: Re: 4.1 STABLE broken since today!
} > } 1. The value of diff in chgsbsize was always positive
} > } (unsigned - unsigned results in an unsigned value).
} > } This causes bogus values in ui_sbsize.
} > This depends on rlim_t being a signed type (which is happens to be).
} > Also, if "to" is the same width as rlim_t, then this code could break
} > if the difference was greater than the maximum positive value of rlim_t
} > (not likely in this particular case). Changing the test from
} > diff > 0
} > to
} > to > *hiwat
} > is much safer.
}
} Well, rlim_t isn't going to change in the foreseeable future. Also,
} we don't support any architectures that support nearly 2^63 bytes of
} physical memory; it's fair to say that there's no way for it to cause
} a problem, but if you don't like it, cleanups can be done at leisure
} :)
Yes, but ...
} > I prefer the following patch to kern_proc.c, which also pulls uifree()
} > out of splnet(), and eliminates some duplicate code. I'm not yet running
} > 4-stable, so I can't test this patch other than to see if it compiles
} > without error.
}
} We'll see, then; since this isn't critical, it can wait, right?
Either my patch or Tor's patch should be applied, since his comment
about the bogus value of diff is correct. In a private message, he
also pointed out that problems could occur when chgsbsize() is called
from an interrupt context because of the calls to uifind() and and
uifree(). At a minimum, we need to wrap the whole function in splnet().
Even that still leaves the problem of uicreate(), which can call
MALLOC(..., M_WAITOK).
A better long term solution would be to store a pointer to the uidinfo
structure in the pcred structure and just pass the uidinfo pointer to
chgsbsize(). That will eliminate most of the calls to ui{find,free}()
and confine them all to the top half of the kernel.
I'm also don't think we do the proper accounting across setuid(). Say
we have a socket with a full buffer, call setuid() to a new uid, and then
drain the socket. We will think the new uid is using a negative amount of
buffer space ...
Then there is the race condition that I found in access(). I think that
requires discussion in arch ...
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-stable" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200009010035.RAA10986>
