From: Nadia.Derbey-6ktuUTfB/bM@public.gmane.org
To: containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org
Cc: Nadia Derbey <Nadia.Derbey-6ktuUTfB/bM@public.gmane.org>,
pavel-+ZI9xUNit7I@public.gmane.org
Subject: [RFC PATCH 2/5] use next syscall data to predefine ipc objects ids
Date: Thu, 03 Jul 2008 16:40:15 +0200 [thread overview]
Message-ID: <20080703144224.982195000@bull.net> (raw)
In-Reply-To: 20080703144013.737951000@bull.net
[-- Attachment #1: ipccreate_use_next_syscall_data.patch --]
[-- Type: text/plain, Size: 3462 bytes --]
[PATCH 02/05]
This patch uses the value written into the next_syscall_data proc file
as a target id for the next IPC object to be created.
The following syscalls have a new behavior if next_syscall_data is set:
. mssget()
. semget()
. shmget()
Signed-off-by: Nadia Derbey <Nadia.Derbey-6ktuUTfB/bM@public.gmane.org>
---
include/linux/next_syscall_data.h | 17 +++++++++++++++--
ipc/util.c | 38 ++++++++++++++++++++++++++++++--------
2 files changed, 45 insertions(+), 10 deletions(-)
Index: linux-2.6.26-rc5-mm3/include/linux/next_syscall_data.h
===================================================================
--- linux-2.6.26-rc5-mm3.orig/include/linux/next_syscall_data.h 2008-07-01 10:25:48.000000000 +0200
+++ linux-2.6.26-rc5-mm3/include/linux/next_syscall_data.h 2008-07-01 11:35:11.000000000 +0200
@@ -3,7 +3,8 @@
*
* Definitions to support fixed data for next syscall to be called. The
* following is supported today:
- * . object creation with a predefined id.
+ * . object creation with a predefined id
+ * . for a sysv ipc object
*
*/
@@ -16,13 +17,25 @@
* If this structure is pointed to by a task_struct, next syscall to be called
* by the task will have a non-default behavior.
* For example, it can be used to pre-set the id of the object to be created
- * by next syscall.
+ * by next syscall. The following syscalls support this feature:
+ * . msgget(), semget(), shmget()
*/
struct next_syscall_data {
int ndata;
long data[NDATA];
};
+/*
+ * Returns true if tsk has some data set in its next_syscall_data, 0 else
+ */
+#define next_data_set(tsk) ((tsk)->nsd \
+ ? ((tsk)->nsd->ndata ? 1 : 0) \
+ : 0)
+
+#define get_next_data(tsk) ((tsk)->nsd->data[0])
+
+
+
extern ssize_t get_next_syscall_data(struct task_struct *, char *, size_t);
extern int set_next_syscall_data(struct task_struct *, char *);
extern int reset_next_syscall_data(struct task_struct *);
Index: linux-2.6.26-rc5-mm3/ipc/util.c
===================================================================
--- linux-2.6.26-rc5-mm3.orig/ipc/util.c 2008-07-01 10:25:48.000000000 +0200
+++ linux-2.6.26-rc5-mm3/ipc/util.c 2008-07-01 10:41:36.000000000 +0200
@@ -266,20 +266,42 @@ int ipc_addid(struct ipc_ids* ids, struc
if (ids->in_use >= size)
return -ENOSPC;
- err = idr_get_new(&ids->ipcs_idr, new, &id);
- if (err)
- return err;
+ if (next_data_set(current)) {
+ /* There is a target id specified, try to use it */
+ int next_id = get_next_data(current);
+ int new_lid = next_id % SEQ_MULTIPLIER;
+
+ if (next_id !=
+ (new_lid + (next_id / SEQ_MULTIPLIER) * SEQ_MULTIPLIER))
+ return -EINVAL;
+
+ err = idr_get_new_above(&ids->ipcs_idr, new, new_lid, &id);
+ if (err)
+ return err;
+ if (id != new_lid) {
+ idr_remove(&ids->ipcs_idr, id);
+ return -EBUSY;
+ }
+
+ new->id = next_id;
+ new->seq = next_id / SEQ_MULTIPLIER;
+ reset_next_syscall_data(current);
+ } else {
+ err = idr_get_new(&ids->ipcs_idr, new, &id);
+ if (err)
+ return err;
+
+ new->seq = ids->seq++;
+ if (ids->seq > ids->seq_max)
+ ids->seq = 0;
+ new->id = ipc_buildid(id, new->seq);
+ }
ids->in_use++;
new->cuid = new->uid = current->euid;
new->gid = new->cgid = current->egid;
- new->seq = ids->seq++;
- if(ids->seq > ids->seq_max)
- ids->seq = 0;
-
- new->id = ipc_buildid(id, new->seq);
spin_lock_init(&new->lock);
new->deleted = 0;
rcu_read_lock();
--
next prev parent reply other threads:[~2008-07-03 14:40 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-07-03 14:40 [RFC PATCH 0/5] Resend - Use procfs to change a syscall behavior Nadia.Derbey-6ktuUTfB/bM
2008-07-03 14:40 ` [RFC PATCH 1/5] adds the procfs facilities Nadia.Derbey-6ktuUTfB/bM
[not found] ` <20080703144224.723883000-6ktuUTfB/bM@public.gmane.org>
2008-07-07 18:30 ` Serge E. Hallyn
[not found] ` <20080707183030.GA22937-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-07-08 5:25 ` Nadia Derbey
2008-07-03 14:40 ` Nadia.Derbey-6ktuUTfB/bM [this message]
[not found] ` <20080703144224.982195000-6ktuUTfB/bM@public.gmane.org>
2008-07-07 18:35 ` [RFC PATCH 2/5] use next syscall data to predefine ipc objects ids Serge E. Hallyn
[not found] ` <20080707183512.GB22937-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-07-08 5:30 ` Nadia Derbey
2008-07-03 14:40 ` [RFC PATCH 3/5] use next syscall data to predefine process ids Nadia.Derbey-6ktuUTfB/bM
[not found] ` <20080703144225.489624000-6ktuUTfB/bM@public.gmane.org>
2008-07-07 18:54 ` Serge E. Hallyn
[not found] ` <20080707185424.GA25934-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-07-08 5:44 ` Nadia Derbey
2008-07-03 14:40 ` [RFC PATCH 4/5] use next syscall data to change the behavior of IPC_SET Nadia.Derbey-6ktuUTfB/bM
2008-07-03 14:40 ` [RFC PATCH 5/5] use next syscall data to predefine the file descriptor value Nadia.Derbey-6ktuUTfB/bM
[not found] ` <20080703144013.737951000-6ktuUTfB/bM@public.gmane.org>
2008-07-04 10:27 ` [RFC PATCH 0/5] Resend - Use procfs to change a syscall behavior Pavel Machek
[not found] ` <20080704102702.GB4531-I/5MKhXcvmPrBKCeMvbIDA@public.gmane.org>
2008-07-04 12:07 ` Nadia Derbey
[not found] ` <486E1276.2080605-6ktuUTfB/bM@public.gmane.org>
2008-07-08 10:51 ` Pavel Machek
[not found] ` <20080708105143.GA15311-I/5MKhXcvmPrBKCeMvbIDA@public.gmane.org>
2008-07-08 21:47 ` Serge E. Hallyn
[not found] ` <20080708214721.GA1972-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-07-08 21:53 ` Pavel Machek
[not found] ` <20080708215315.GD17083-I/5MKhXcvmPrBKCeMvbIDA@public.gmane.org>
2008-07-10 6:54 ` Nadia Derbey
[not found] ` <4875B212.5030604-6ktuUTfB/bM@public.gmane.org>
2008-07-10 7:01 ` [Devel] " Paul Menage
[not found] ` <6599ad830807100001j3f3a6cf2y7a19dda9382edb2c-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-07-10 9:14 ` Nadia Derbey
[not found] ` <4875D2EA.4010407-6ktuUTfB/bM@public.gmane.org>
2008-07-10 9:30 ` Paul Menage
[not found] ` <6599ad830807100230k2f3f3551sa4b804f4c20b43fe-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-07-10 10:11 ` Nadia Derbey
2008-07-10 7:42 ` Nadia Derbey
[not found] ` <4875BD4B.2070402-6ktuUTfB/bM@public.gmane.org>
2008-07-10 8:54 ` Pavel Machek
[not found] ` <20080710085406.GA13258-I/5MKhXcvmPrBKCeMvbIDA@public.gmane.org>
2008-07-10 9:29 ` Nadia Derbey
2008-07-10 17:53 ` Dave Hansen
2008-07-10 18:45 ` Pavel Machek
[not found] ` <20080710184512.GA19428-I/5MKhXcvmPrBKCeMvbIDA@public.gmane.org>
2008-07-10 19:04 ` Dave Hansen
2008-07-10 19:27 ` Serge E. Hallyn
2008-07-07 19:01 ` Serge E. Hallyn
[not found] ` <20080707190119.GB25934-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-07-08 10:52 ` Pavel Machek
[not found] ` <20080708105228.GB15311-I/5MKhXcvmPrBKCeMvbIDA@public.gmane.org>
2008-07-08 21:50 ` Serge E. Hallyn
[not found] ` <20080708215034.GB2179-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-07-08 21:58 ` Pavel Machek
[not found] ` <20080708215821.GE17083-I/5MKhXcvmPrBKCeMvbIDA@public.gmane.org>
2008-07-09 2:20 ` Serge E. Hallyn
[not found] ` <20080709022035.GA21249-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-07-10 7:58 ` Nadia Derbey
[not found] ` <4875C138.5060506-6ktuUTfB/bM@public.gmane.org>
2008-07-10 8:34 ` [Devel] " Paul Menage
[not found] ` <6599ad830807100134l362ab98bt868e078eeb17b838-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-07-10 9:38 ` Nadia Derbey
2008-07-17 22:26 ` Oren Laadan
-- strict thread matches above, loose matches on Subject: below --
2008-07-08 11:24 [RFC PATCH 0/5] Resend -v2 " Nadia.Derbey-6ktuUTfB/bM
2008-07-08 11:24 ` [RFC PATCH 2/5] use next syscall data to predefine ipc objects ids Nadia.Derbey-6ktuUTfB/bM
[not found] ` <20080708112458.416998000-6ktuUTfB/bM@public.gmane.org>
2008-07-08 19:38 ` Serge E. Hallyn
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20080703144224.982195000@bull.net \
--to=nadia.derbey-6ktuutfb/bm@public.gmane.org \
--cc=containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
--cc=pavel-+ZI9xUNit7I@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.