summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArkadiusz Miƛkiewicz2010-11-25 18:53:28 (GMT)
committercvs2git2012-06-24 12:13:13 (GMT)
commit2166a7464f296fd9cc744756e1c961452750923c (patch)
tree9d82e7dc3b43e2a080e2d0a0a95e27c3470b5f33
parent1b676aefeeb0d5346e7c568f728b0ef4556f30a2 (diff)
downloadkernel-2166a7464f296fd9cc744756e1c961452750923c.zip
kernel-2166a7464f296fd9cc744756e1c961452750923c.tar.gz
- revert last commit and drop only first hunk (already in 2.6.36.1)
Changed files: kernel-grsec_full.patch -> 1.51
-rw-r--r--kernel-grsec_full.patch126
1 files changed, 126 insertions, 0 deletions
diff --git a/kernel-grsec_full.patch b/kernel-grsec_full.patch
index 7001dc8..81e962a 100644
--- a/kernel-grsec_full.patch
+++ b/kernel-grsec_full.patch
@@ -33165,6 +33165,132 @@ diff -urNp linux-2.6.36/fs/open.c linux-2.6.36/fs/open.c
newattrs.ia_valid = ATTR_CTIME;
if (user != (uid_t) -1) {
newattrs.ia_valid |= ATTR_UID;
+diff -urNp linux-2.6.36/fs/pipe.c linux-2.6.36/fs/pipe.c
+--- linux-2.6.36/fs/pipe.c 2010-10-20 16:30:22.000000000 -0400
++++ linux-2.6.36/fs/pipe.c 2010-11-06 18:58:50.000000000 -0400
+@@ -420,9 +420,9 @@ redo:
+ }
+ if (bufs) /* More to do? */
+ continue;
+- if (!pipe->writers)
++ if (!atomic_read(&pipe->writers))
+ break;
+- if (!pipe->waiting_writers) {
++ if (!atomic_read(&pipe->waiting_writers)) {
+ /* syscall merging: Usually we must not sleep
+ * if O_NONBLOCK is set, or if we got some data.
+ * But if a writer sleeps in kernel space, then
+@@ -481,7 +481,7 @@ pipe_write(struct kiocb *iocb, const str
+ mutex_lock(&inode->i_mutex);
+ pipe = inode->i_pipe;
+
+- if (!pipe->readers) {
++ if (!atomic_read(&pipe->readers)) {
+ send_sig(SIGPIPE, current, 0);
+ ret = -EPIPE;
+ goto out;
+@@ -530,7 +530,7 @@ redo1:
+ for (;;) {
+ int bufs;
+
+- if (!pipe->readers) {
++ if (!atomic_read(&pipe->readers)) {
+ send_sig(SIGPIPE, current, 0);
+ if (!ret)
+ ret = -EPIPE;
+@@ -616,9 +616,9 @@ redo2:
+ kill_fasync(&pipe->fasync_readers, SIGIO, POLL_IN);
+ do_wakeup = 0;
+ }
+- pipe->waiting_writers++;
++ atomic_inc(&pipe->waiting_writers);
+ pipe_wait(pipe);
+- pipe->waiting_writers--;
++ atomic_dec(&pipe->waiting_writers);
+ }
+ out:
+ mutex_unlock(&inode->i_mutex);
+@@ -685,7 +685,7 @@ pipe_poll(struct file *filp, poll_table
+ mask = 0;
+ if (filp->f_mode & FMODE_READ) {
+ mask = (nrbufs > 0) ? POLLIN | POLLRDNORM : 0;
+- if (!pipe->writers && filp->f_version != pipe->w_counter)
++ if (!atomic_read(&pipe->writers) && filp->f_version != pipe->w_counter)
+ mask |= POLLHUP;
+ }
+
+@@ -695,7 +695,7 @@ pipe_poll(struct file *filp, poll_table
+ * Most Unices do not set POLLERR for FIFOs but on Linux they
+ * behave exactly like pipes for poll().
+ */
+- if (!pipe->readers)
++ if (!atomic_read(&pipe->readers))
+ mask |= POLLERR;
+ }
+
+@@ -709,10 +709,10 @@ pipe_release(struct inode *inode, int de
+
+ mutex_lock(&inode->i_mutex);
+ pipe = inode->i_pipe;
+- pipe->readers -= decr;
+- pipe->writers -= decw;
++ atomic_sub(decr, &pipe->readers);
++ atomic_sub(decw, &pipe->writers);
+
+- if (!pipe->readers && !pipe->writers) {
++ if (!atomic_read(&pipe->readers) && !atomic_read(&pipe->writers)) {
+ free_pipe_info(inode);
+ } else {
+ wake_up_interruptible_sync(&pipe->wait);
+@@ -802,7 +802,7 @@ pipe_read_open(struct inode *inode, stru
+
+ if (inode->i_pipe) {
+ ret = 0;
+- inode->i_pipe->readers++;
++ atomic_inc(&inode->i_pipe->readers);
+ }
+
+ mutex_unlock(&inode->i_mutex);
+@@ -819,7 +819,7 @@ pipe_write_open(struct inode *inode, str
+
+ if (inode->i_pipe) {
+ ret = 0;
+- inode->i_pipe->writers++;
++ atomic_inc(&inode->i_pipe->writers);
+ }
+
+ mutex_unlock(&inode->i_mutex);
+@@ -837,9 +837,9 @@ pipe_rdwr_open(struct inode *inode, stru
+ if (inode->i_pipe) {
+ ret = 0;
+ if (filp->f_mode & FMODE_READ)
+- inode->i_pipe->readers++;
++ atomic_inc(&inode->i_pipe->readers);
+ if (filp->f_mode & FMODE_WRITE)
+- inode->i_pipe->writers++;
++ atomic_inc(&inode->i_pipe->writers);
+ }
+
+ mutex_unlock(&inode->i_mutex);
+@@ -931,7 +931,7 @@ void free_pipe_info(struct inode *inode)
+ inode->i_pipe = NULL;
+ }
+
+-static struct vfsmount *pipe_mnt __read_mostly;
++struct vfsmount *pipe_mnt __read_mostly;
+
+ /*
+ * pipefs_dname() is called from d_path().
+@@ -959,7 +959,8 @@ static struct inode * get_pipe_inode(voi
+ goto fail_iput;
+ inode->i_pipe = pipe;
+
+- pipe->readers = pipe->writers = 1;
++ atomic_set(&pipe->readers, 1);
++ atomic_set(&pipe->writers, 1);
+ inode->i_fop = &rdwr_pipefifo_fops;
+
+ /*
diff -urNp linux-2.6.36/fs/proc/array.c linux-2.6.36/fs/proc/array.c
--- linux-2.6.36/fs/proc/array.c 2010-10-20 16:30:22.000000000 -0400
+++ linux-2.6.36/fs/proc/array.c 2010-11-06 18:58:50.000000000 -0400