On Thu, 6 Aug 2009, Julian Elischer wrote: > Rick Macklem wrote: >> >> >> On Thu, 6 Aug 2009, Robert Watson wrote: >> >>> other places where we have very strong alignment requirements on >>> i386/amd64, such as the td_ucred pointer that we check for change on >>> system calls/traps to see if we need to refresh the thread's credential >>> from the process credential. >>> >> Does this imply that the krpc/nlm/nfs hack of: >> oldcred = td->td_ucred; >> td->td_ucred = "some other cred ptr, such as the mount one" >> ... >> td->td_ucred = oldcred; >> >> could be dangerous? >> >> Maybe it should be converted to code that replaces the contents instead >> of replacing the *cred? (Variants of the above live in a bunch of places >> in the krpc, nlm and nfs code, due to the fact that the socket functions >> use td->td_ucred in various places.) > > no, creds are read-only .. you never change a cred. > You alwasy make a new one ans use it, becasue you may be shareing your cred > with hundreds of other sibling threads or processes. (they are refcounted) > Righto, yes. So does that imply that the alignment provided by crget() { which uses malloc() } is sufficient for td->td_ucred or is td->td_ucred a special case? rick ps: The above hack, which came up in a separate discussion yesterday, isn't gonna be easy to get rid of, imho. A whole bunch of network related functions use td->td_ucred and the only fix I can see would be to add "*cred" arguments to them all, so that the krpc/nlm/nfs code could pass the correct *cred in. (It is set to the one used at mount time for network reconnects, etc.)Received on Thu Aug 06 2009 - 13:35:14 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:53 UTC