* [PATCH] Keys: Base keyring size on key pointer not key struct
@ 2005-07-05 19:26 David Howells
0 siblings, 0 replies; only message in thread
From: David Howells @ 2005-07-05 19:26 UTC (permalink / raw)
To: torvalds, akpm; +Cc: linux-kernel
The attached patch makes the keyring functions calculate the new size of a
keyring's payload based on the size of pointer to the key struct, not the size
of the key struct itself.
Signed-Off-By: David Howells <dhowells@redhat.com>
---
warthog>diffstat -p1 ../keys-2612mm1.diff
security/keys/keyring.c | 15 ++++++++-------
1 files changed, 8 insertions(+), 7 deletions(-)
diff -uNrp linux-2.6.12-mm1/security/keys/keyring.c linux-2.6.12-mm1-keys/security/keys/keyring.c
--- linux-2.6.12-mm1/security/keys/keyring.c 2005-06-22 13:54:09.000000000 +0100
+++ linux-2.6.12-mm1-keys/security/keys/keyring.c 2005-07-05 20:21:08.000000000 +0100
@@ -129,7 +129,7 @@ static int keyring_duplicate(struct key
int loop, ret;
const unsigned limit =
- (PAGE_SIZE - sizeof(*klist)) / sizeof(struct key);
+ (PAGE_SIZE - sizeof(*klist)) / sizeof(struct key *);
ret = 0;
@@ -150,7 +150,7 @@ static int keyring_duplicate(struct key
max = limit;
ret = -ENOMEM;
- size = sizeof(*klist) + sizeof(struct key) * max;
+ size = sizeof(*klist) + sizeof(struct key *) * max;
klist = kmalloc(size, GFP_KERNEL);
if (!klist)
goto error;
@@ -163,7 +163,7 @@ static int keyring_duplicate(struct key
klist->nkeys = sklist->nkeys;
memcpy(klist->keys,
sklist->keys,
- sklist->nkeys * sizeof(struct key));
+ sklist->nkeys * sizeof(struct key *));
for (loop = klist->nkeys - 1; loop >= 0; loop--)
atomic_inc(&klist->keys[loop]->usage);
@@ -783,7 +783,7 @@ int __key_link(struct key *keyring, stru
ret = -ENFILE;
if (max > 65535)
goto error3;
- size = sizeof(*klist) + sizeof(*key) * max;
+ size = sizeof(*klist) + sizeof(struct key *) * max;
if (size > PAGE_SIZE)
goto error3;
@@ -895,7 +895,8 @@ int key_unlink(struct key *keyring, stru
key_is_present:
/* we need to copy the key list for RCU purposes */
- nklist = kmalloc(sizeof(*klist) + sizeof(*key) * klist->maxkeys,
+ nklist = kmalloc(sizeof(*klist) +
+ sizeof(struct key *) * klist->maxkeys,
GFP_KERNEL);
if (!nklist)
goto nomem;
@@ -905,12 +906,12 @@ key_is_present:
if (loop > 0)
memcpy(&nklist->keys[0],
&klist->keys[0],
- loop * sizeof(klist->keys[0]));
+ loop * sizeof(struct key *));
if (loop < nklist->nkeys)
memcpy(&nklist->keys[loop],
&klist->keys[loop + 1],
- (nklist->nkeys - loop) * sizeof(klist->keys[0]));
+ (nklist->nkeys - loop) * sizeof(struct key *));
/* adjust the user's quota */
key_payload_reserve(keyring,
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2005-07-05 19:30 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-07-05 19:26 [PATCH] Keys: Base keyring size on key pointer not key struct David Howells
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox