]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.10-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 14 Feb 2016 01:57:20 +0000 (17:57 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 14 Feb 2016 01:57:20 +0000 (17:57 -0800)
added patches:
fix-sysvfs-symlinks.patch

queue-3.10/fix-sysvfs-symlinks.patch [new file with mode: 0644]
queue-3.10/series

diff --git a/queue-3.10/fix-sysvfs-symlinks.patch b/queue-3.10/fix-sysvfs-symlinks.patch
new file mode 100644 (file)
index 0000000..32a21bb
--- /dev/null
@@ -0,0 +1,45 @@
+From 0ebf7f10d67a70e120f365018f1c5fce9ddc567d Mon Sep 17 00:00:00 2001
+From: Al Viro <viro@zeniv.linux.org.uk>
+Date: Mon, 23 Nov 2015 21:11:08 -0500
+Subject: fix sysvfs symlinks
+
+From: Al Viro <viro@zeniv.linux.org.uk>
+
+commit 0ebf7f10d67a70e120f365018f1c5fce9ddc567d upstream.
+
+The thing got broken back in 2002 - sysvfs does *not* have inline
+symlinks; even short ones have bodies stored in the first block
+of file.  sysv_symlink() handles that correctly; unfortunately,
+attempting to look an existing symlink up will end up confusing
+them for inline symlinks, and interpret the block number containing
+the body as the body itself.
+
+Nobody has noticed until now, which says something about the level
+of testing sysvfs gets ;-/
+
+Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ fs/sysv/inode.c |   10 ++--------
+ 1 file changed, 2 insertions(+), 8 deletions(-)
+
+--- a/fs/sysv/inode.c
++++ b/fs/sysv/inode.c
+@@ -161,14 +161,8 @@ void sysv_set_inode(struct inode *inode,
+               inode->i_fop = &sysv_dir_operations;
+               inode->i_mapping->a_ops = &sysv_aops;
+       } else if (S_ISLNK(inode->i_mode)) {
+-              if (inode->i_blocks) {
+-                      inode->i_op = &sysv_symlink_inode_operations;
+-                      inode->i_mapping->a_ops = &sysv_aops;
+-              } else {
+-                      inode->i_op = &sysv_fast_symlink_inode_operations;
+-                      nd_terminate_link(SYSV_I(inode)->i_data, inode->i_size,
+-                              sizeof(SYSV_I(inode)->i_data) - 1);
+-              }
++              inode->i_op = &sysv_symlink_inode_operations;
++              inode->i_mapping->a_ops = &sysv_aops;
+       } else
+               init_special_inode(inode, inode->i_mode, rdev);
+ }
index 7517c6fe4a5e207959b77cd95f861e0735946b7e..f794b872ccf80da649c91c8c4c42b4f6b68d8fc2 100644 (file)
@@ -22,3 +22,4 @@ parisc-fix-syscall-restarts.patch
 parisc-fix-__arch_si_preamble_size.patch
 v4l2-compat-ioctl32-fix-alignment-for-arm64.patch
 media-vb2-dma-contig-fully-cache-synchronise-buffers-in-prepare-and-finish.patch
+fix-sysvfs-symlinks.patch