git.samba.org
/
sfrench
/
cifs-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Pull hotplug into release branch
[sfrench/cifs-2.6.git]
/
ipc
/
mqueue.c
diff --git
a/ipc/mqueue.c
b/ipc/mqueue.c
index 24df3347ad4b4ca47d60a8f6c33f4e4d9dea1c40..6ca7b97114f3c599d1fbb5c7beea0f7003bd4217 100644
(file)
--- a/
ipc/mqueue.c
+++ b/
ipc/mqueue.c
@@
-29,6
+29,8
@@
#include <linux/audit.h>
#include <linux/signal.h>
#include <linux/mutex.h>
#include <linux/audit.h>
#include <linux/signal.h>
#include <linux/mutex.h>
+#include <linux/nsproxy.h>
+#include <linux/pid.h>
#include <net/sock.h>
#include "util.h"
#include <net/sock.h>
#include "util.h"
@@
-44,12
+46,6
@@
#define STATE_PENDING 1
#define STATE_READY 2
#define STATE_PENDING 1
#define STATE_READY 2
-/* used by sysctl */
-#define FS_MQUEUE 1
-#define CTL_QUEUESMAX 2
-#define CTL_MSGMAX 3
-#define CTL_MSGSIZEMAX 4
-
/* default values */
#define DFLT_QUEUESMAX 256 /* max number of message queues */
#define DFLT_MSGMAX 10 /* max number of messages in each queue */
/* default values */
#define DFLT_QUEUESMAX 256 /* max number of message queues */
#define DFLT_MSGMAX 10 /* max number of messages in each queue */
@@
-211,7
+207,7
@@
static int mqueue_get_sb(struct file_system_type *fs_type,
return get_sb_single(fs_type, flags, data, mqueue_fill_super, mnt);
}
return get_sb_single(fs_type, flags, data, mqueue_fill_super, mnt);
}
-static void init_once(
void *foo, struct kmem_cache * cachep, unsigned long flags
)
+static void init_once(
struct kmem_cache *cachep, void *foo
)
{
struct mqueue_inode_info *p = (struct mqueue_inode_info *) foo;
{
struct mqueue_inode_info *p = (struct mqueue_inode_info *) foo;
@@
-336,7
+332,8
@@
static ssize_t mqueue_read_file(struct file *filp, char __user *u_data,
(info->notify_owner &&
info->notify.sigev_notify == SIGEV_SIGNAL) ?
info->notify.sigev_signo : 0,
(info->notify_owner &&
info->notify.sigev_notify == SIGEV_SIGNAL) ?
info->notify.sigev_signo : 0,
- pid_nr(info->notify_owner));
+ pid_nr_ns(info->notify_owner,
+ current->nsproxy->pid_ns));
spin_unlock(&info->lock);
buffer[sizeof(buffer)-1] = '\0';
slen = strlen(buffer)+1;
spin_unlock(&info->lock);
buffer[sizeof(buffer)-1] = '\0';
slen = strlen(buffer)+1;
@@
-513,7
+510,7
@@
static void __do_notify(struct mqueue_inode_info *info)
sig_i.si_errno = 0;
sig_i.si_code = SI_MESGQ;
sig_i.si_value = info->notify.sigev_value;
sig_i.si_errno = 0;
sig_i.si_code = SI_MESGQ;
sig_i.si_value = info->notify.sigev_value;
- sig_i.si_pid =
current->tgid
;
+ sig_i.si_pid =
task_pid_vnr(current)
;
sig_i.si_uid = current->uid;
kill_pid_info(info->notify.sigev_signo,
sig_i.si_uid = current->uid;
kill_pid_info(info->notify.sigev_signo,
@@
-679,7
+676,7
@@
asmlinkage long sys_mq_open(const char __user *u_name, int oflag, mode_t mode,
if (oflag & O_CREAT) {
if (dentry->d_inode) { /* entry already exists */
if (oflag & O_CREAT) {
if (dentry->d_inode) { /* entry already exists */
- audit_inode(name, dentry
->d_inode
);
+ audit_inode(name, dentry);
error = -EEXIST;
if (oflag & O_EXCL)
goto out;
error = -EEXIST;
if (oflag & O_EXCL)
goto out;
@@
-692,7
+689,7
@@
asmlinkage long sys_mq_open(const char __user *u_name, int oflag, mode_t mode,
error = -ENOENT;
if (!dentry->d_inode)
goto out;
error = -ENOENT;
if (!dentry->d_inode)
goto out;
- audit_inode(name, dentry
->d_inode
);
+ audit_inode(name, dentry);
filp = do_open(dentry, oflag);
}
filp = do_open(dentry, oflag);
}
@@
-840,7
+837,7
@@
asmlinkage long sys_mq_timedsend(mqd_t mqdes, const char __user *u_msg_ptr,
if (unlikely(filp->f_op != &mqueue_file_operations))
goto out_fput;
info = MQUEUE_I(inode);
if (unlikely(filp->f_op != &mqueue_file_operations))
goto out_fput;
info = MQUEUE_I(inode);
- audit_inode(NULL,
inode
);
+ audit_inode(NULL,
filp->f_path.dentry
);
if (unlikely(!(filp->f_mode & FMODE_WRITE)))
goto out_fput;
if (unlikely(!(filp->f_mode & FMODE_WRITE)))
goto out_fput;
@@
-924,7
+921,7
@@
asmlinkage ssize_t sys_mq_timedreceive(mqd_t mqdes, char __user *u_msg_ptr,
if (unlikely(filp->f_op != &mqueue_file_operations))
goto out_fput;
info = MQUEUE_I(inode);
if (unlikely(filp->f_op != &mqueue_file_operations))
goto out_fput;
info = MQUEUE_I(inode);
- audit_inode(NULL,
inode
);
+ audit_inode(NULL,
filp->f_path.dentry
);
if (unlikely(!(filp->f_mode & FMODE_READ)))
goto out_fput;
if (unlikely(!(filp->f_mode & FMODE_READ)))
goto out_fput;
@@
-1013,6
+1010,8
@@
asmlinkage long sys_mq_notify(mqd_t mqdes,
return -EINVAL;
}
if (notification.sigev_notify == SIGEV_THREAD) {
return -EINVAL;
}
if (notification.sigev_notify == SIGEV_THREAD) {
+ long timeo;
+
/* create the notify skb */
nc = alloc_skb(NOTIFY_COOKIE_LEN, GFP_KERNEL);
ret = -ENOMEM;
/* create the notify skb */
nc = alloc_skb(NOTIFY_COOKIE_LEN, GFP_KERNEL);
ret = -ENOMEM;
@@
-1041,8
+1040,8
@@
retry:
goto out;
}
goto out;
}
- ret = netlink_attachskb(sock, nc, 0,
-
MAX_SCHEDULE_TIMEOUT
, NULL);
+ timeo = MAX_SCHEDULE_TIMEOUT;
+
ret = netlink_attachskb(sock, nc, 0, &timeo
, NULL);
if (ret == 1)
goto retry;
if (ret) {
if (ret == 1)
goto retry;
if (ret) {
@@
-1139,8
+1138,10
@@
asmlinkage long sys_mq_getsetattr(mqd_t mqdes,
omqstat.mq_flags = filp->f_flags & O_NONBLOCK;
if (u_mqstat) {
ret = audit_mq_getsetattr(mqdes, &mqstat);
omqstat.mq_flags = filp->f_flags & O_NONBLOCK;
if (u_mqstat) {
ret = audit_mq_getsetattr(mqdes, &mqstat);
- if (ret != 0)
- goto out;
+ if (ret != 0) {
+ spin_unlock(&info->lock);
+ goto out_fput;
+ }
if (mqstat.mq_flags & O_NONBLOCK)
filp->f_flags |= O_NONBLOCK;
else
if (mqstat.mq_flags & O_NONBLOCK)
filp->f_flags |= O_NONBLOCK;
else
@@
-1196,7
+1197,6
@@
static int msg_maxsize_limit_max = INT_MAX;
static ctl_table mq_sysctls[] = {
{
static ctl_table mq_sysctls[] = {
{
- .ctl_name = CTL_QUEUESMAX,
.procname = "queues_max",
.data = &queues_max,
.maxlen = sizeof(int),
.procname = "queues_max",
.data = &queues_max,
.maxlen = sizeof(int),
@@
-1204,7
+1204,6
@@
static ctl_table mq_sysctls[] = {
.proc_handler = &proc_dointvec,
},
{
.proc_handler = &proc_dointvec,
},
{
- .ctl_name = CTL_MSGMAX,
.procname = "msg_max",
.data = &msg_max,
.maxlen = sizeof(int),
.procname = "msg_max",
.data = &msg_max,
.maxlen = sizeof(int),
@@
-1214,7
+1213,6
@@
static ctl_table mq_sysctls[] = {
.extra2 = &msg_max_limit_max,
},
{
.extra2 = &msg_max_limit_max,
},
{
- .ctl_name = CTL_MSGSIZEMAX,
.procname = "msgsize_max",
.data = &msgsize_max,
.maxlen = sizeof(int),
.procname = "msgsize_max",
.data = &msgsize_max,
.maxlen = sizeof(int),
@@
-1228,7
+1226,6
@@
static ctl_table mq_sysctls[] = {
static ctl_table mq_sysctl_dir[] = {
{
static ctl_table mq_sysctl_dir[] = {
{
- .ctl_name = FS_MQUEUE,
.procname = "mqueue",
.mode = 0555,
.child = mq_sysctls,
.procname = "mqueue",
.mode = 0555,
.child = mq_sysctls,