Messages in this thread Patch in this message |  | | Date | Mon, 9 Oct 2000 01:43:38 -0200 (GMT+2) | From | Dan Aloni <> | Subject | [PATCH] Re: 2.4.0test - uid_hash_find() |
| |
On Sun, 8 Oct 2000, Mitchell Blank Jr wrote:
> Dan Aloni wrote: > > > > I've been touring around the kernel sources when I stumbled > > across the uid_hash_find() function (kernel/user.c): > > > > static inline struct user_struct *uid_hash_find(unsigned short uid, unsigned int hashent) > > Is it just me, or should that be "uid_t" not "unsigned short"? Now THAT > looks like a bug. >
You are right, that was the original function. The bug will typically show in a system with more than a few tens of thousands of users.
So here's the complete patch for test9's kernel/user.c, including the removal of the unnecessery initialization:
--- linux-2.4.0-test9/kernel/user.c Mon Oct 9 01:37:35 2000 +++ linux.vanilla/kernel/user.c Sun Oct 8 22:33:55 2000 @@ -51,22 +51,18 @@ *up->pprev = up->next; } -static inline struct user_struct *uid_hash_find(uid_t uid, unsigned int hashent) +static inline struct user_struct *uid_hash_find(unsigned short uid, unsigned int hashent) { - struct user_struct *up, *next; + struct user_struct *up; - next = uidhash[hashent]; - for (;;) { - up = next; - if (next) { - next = up->next; - if (up->uid != uid) - continue; - atomic_inc(&up->__count); + for (up = uidhash[hashent]; up ; up = up->next) + if (up->uid == uid) + { + atomic_inc(&up->__count) + return up; } - break; - } - return up; + + return NULL; } /* @@ -136,16 +132,11 @@ static int __init uid_cache_init(void) { - int i; - uid_cachep = kmem_cache_create("uid_cache", sizeof(struct user_struct), 0, SLAB_HWCACHE_ALIGN, NULL, NULL); if(!uid_cachep) panic("Cannot create uid taskcount SLAB cache\n"); - - for(i = 0; i < UIDHASH_SZ; i++) - uidhash[i] = 0; /* Insert the root user immediately - init already runs with this */ uid_hash_insert(&root_user, uidhashfn(0));
-- Dan Aloni dax@karrde.org
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/
|  |