From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sougata Santra Subject: [PATCH 0/1] hfsplus: fix longname handling Date: Mon, 24 Feb 2014 21:23:48 +0200 Message-ID: <1393269828.27792.5.camel@ultrabook> Reply-To: Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: QUOTED-PRINTABLE Cc: Joe Perches , Vyacheslav Dubeyko , Christoph Hellwig , Sougata Santra , Al Viro , , To: Andrew Morton Return-path: Sender: linux-kernel-owner@vger.kernel.org List-Id: linux-fsdevel.vger.kernel.org Hi, Longname is not correctly handled by hfsplus driver. If an attempt to create a longname(>255) file/directory is made, it succeeds by creating a file/directory with HFSPLUS_MAX_STRLEN and incorrect catalog key. Thus leaving the volume in an inconsistent state. This patch fixes this issue. Although lookup is always called first to create a negative entry, so j= ust doing a check in lookup would probably fix this issue. I choose to prop= agate error to other iops as well. Please NOTE: I have factored out hfsplus_cat_build_key_with_cnid from=20 hfsplus_cat_build_key, to avoid unncessary branching. Thanks a lot. TEST: ------ dir=3D"TEST_DIR" cdir=3D`pwd` name255=3D"_123456789_123456789_123456789_123456789_123456789_123456789= \ _123456789_123456789_123456789_123456789_123456789_123456789_123456789\ _123456789_123456789_123456789_123456789_123456789_123456789_123456789\ _123456789_123456789_123456789_123456789_123456789_1234" name256=3D"${name255}5" mkdir $dir cd $dir touch $name255 rm -f $name255 touch $name256 ls -la cd $cdir rm -rf $dir RESULT: ------- [sougata@ultrabook tmp]$ cdir=3D`pwd` [sougata@ultrabook tmp]$=20 name255=3D"_123456789_123456789_123456789_123456789_123456789_123456789= \ > _123456789_123456789_123456789_123456789_123456789_123456789_1234567= 89\ > _123456789_123456789_123456789_123456789_123456789_123456789_1234567= 89\ > _123456789_123456789_123456789_123456789_123456789_1234" [sougata@ultrabook tmp]$ name256=3D"${name255}5" [sougata@ultrabook tmp]$ [sougata@ultrabook tmp]$ mkdir $dir [sougata@ultrabook tmp]$ cd $dir [sougata@ultrabook TEST_DIR]$ touch $name255 [sougata@ultrabook TEST_DIR]$ rm -f $name255 [sougata@ultrabook TEST_DIR]$ touch $name256 [sougata@ultrabook TEST_DIR]$ ls -la ls: cannot access=20 _123456789_123456789_123456789_123456789_123456789_123456789_123456789_= 123456789_123456789_123456789_123456789_123456789_123456789_123456789_1= 23456789_123456789_123456789_123456789_123456789_123456789_123456789_12= 3456789_123456789_123456789_123456789_1234: No such file or directory total 0 drwxrwxr-x 1 sougata sougata 3 Feb 20 19:56 . drwxrwxrwx 1 root root 6 Feb 20 19:56 .. -????????? ? ? ? ? ?=20 _123456789_123456789_123456789_123456789_123456789_123456789_123456789_= 123456789_123456789_123456789_123456789_123456789_123456789_123456789_1= 23456789_123456789_123456789_123456789_123456789_123456789_123456789_12= 3456789_123456789_123456789_123456789_1234 [sougata@ultrabook TEST_DIR]$ cd $cdir [sougata@ultrabook tmp]$ rm -rf $dir rm: cannot remove =E2=80=98TEST_DIR=E2=80=99: Directory not empty Sougata Santra (1): hfsplus: fix longname handling fs/hfsplus/catalog.c | 89 ++++++++++++++++++++++++++++++++++++-----= -------- fs/hfsplus/dir.c | 11 ++++-- fs/hfsplus/hfsplus_fs.h | 4 ++- fs/hfsplus/super.c | 4 ++- 4 files changed, 79 insertions(+), 29 deletions(-) --=20 1.8.5.3