]> git.apps.os.sepia.ceph.com Git - xfstests-dev.git/commitdiff
generic/453: test creation of malicious directory entries
authorDarrick J. Wong <darrick.wong@oracle.com>
Tue, 1 May 2018 15:39:57 +0000 (08:39 -0700)
committerEryu Guan <guaneryu@gmail.com>
Wed, 2 May 2018 08:33:17 +0000 (16:33 +0800)
Create malicious . and .. entries (you didn't see the zero-width
joiners at the end, did you?) in a directory to see if scrub will pick
them up.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Eryu Guan <guaneryu@gmail.com>
tests/generic/453

index 91d163ca71bfd225e30b138fc164eb5b5164df2a..8841f5814cc7b7e4ea8018f9576331413aefd619 100755 (executable)
@@ -62,6 +62,15 @@ setf() {
        echo "Storing ${key} ($(hexbytes "${key}")) -> ${value}" >> $seqres.full
 }
 
+setd() {
+       key="$(echo -e "$1")"
+       value="$2"
+
+       mkdir -p "${testdir}/${key}"
+       echo "${value}" > "${testdir}/${key}/value"
+       echo "Storing ${key} ($(hexbytes "${key}")) -> ${value}" >> $seqres.full
+}
+
 testf() {
        key="$(echo -e "$1")"
        value="$2"
@@ -80,6 +89,24 @@ testf() {
        fi
 }
 
+testd() {
+       key="$(echo -e "$1")"
+       value="$2"
+       fname="${testdir}/${key}/value"
+
+       echo "Testing ${key} ($(hexbytes "${key}")) -> ${value}" >> $seqres.full
+
+       if [ ! -e "${fname}" ]; then
+               echo "Key ${key} does not exist for ${value} test??"
+               return
+       fi
+
+       actual_value="$(cat "${fname}")"
+       if [ "${actual_value}" != "${value}" ]; then
+               echo "Key ${key} has value ${value}, expected ${actual_value}."
+       fi
+}
+
 filter_scrub() {
        grep 'Unicode' | sed -e 's/^.*Duplicate/Duplicate/g'
 }
@@ -143,6 +170,10 @@ setf "zerojoin_moo\xe2\x80\x8dcow.txt" "zero width joiners"
 setf "combmark_\xe1\x80\x9c\xe1\x80\xad\xe1\x80\xaf.txt" "combining marks"
 setf "combmark_\xe1\x80\x9c\xe1\x80\xaf\xe1\x80\xad.txt" "combining marks"
 
+# fake dotdot entry
+setd ".\xe2\x80\x8d" "zero width joiners in dot entry"
+setd "..\xe2\x80\x8d" "zero width joiners in dotdot entry"
+
 ls -la $testdir >> $seqres.full
 
 echo "Test files"
@@ -190,6 +221,9 @@ testf "zerojoin_moo\xe2\x80\x8dcow.txt" "zero width joiners"
 testf "combmark_\xe1\x80\x9c\xe1\x80\xad\xe1\x80\xaf.txt" "combining marks"
 testf "combmark_\xe1\x80\x9c\xe1\x80\xaf\xe1\x80\xad.txt" "combining marks"
 
+testd ".\xe2\x80\x8d" "zero width joiners in dot entry"
+testd "..\xe2\x80\x8d" "zero width joiners in dotdot entry"
+
 echo "Uniqueness of inodes?"
 stat -c '%i' "${testdir}/"* | sort | uniq -c | while read nr inum; do
        if [ "${nr}" -gt 1 ]; then