lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Date:	Thu, 13 Aug 2015 18:08:22 -0700
From:	Gregory Fong <gregory.0xf0@...il.com>
To:	Michal Marek <mmarek@...e.cz>
Cc:	linux-kernel@...r.kernel.org, Gregory Fong <gregory.0xf0@...il.com>
Subject: [PATCH v2] scripts/setlocalversion: fix false positive -dirty tag from ctime

git-diff-index cannot detect that a file hasn't actually changed when
the file's ctime has changed (e.g. if chmod was used but didn't
actually result in any changes), which was causing setlocalversion to
incorrectly add a -dirty tag.  Run git-update-index beforehand to make
sure that the index is correct.

Test prep:
  make defconfig && make prepare

Before, starting from clean index:
  $ ls -l Kbuild
  -rw-rw-r-- 1 gregory gregory 2622 Aug 10 12:38 Kbuild
  $ chmod u+w Kbuild  # intentional no-op that updates ctime
  $ CONFIG_LOCALVERSION_AUTO=y /bin/sh scripts/setlocalversion $PWD
  -00130-g7ddab73-dirty

After, starting from clean index:
  $ ls -l Kbuild
  -rw-rw-r-- 1 gregory gregory 2622 Aug 10 12:38 Kbuild
  $ chmod u+w Kbuild  # intentional no-op that updates ctime
  $ CONFIG_LOCALVERSION_AUTO=y /bin/sh scripts/setlocalversion $PWD
  -00131-gfa3477d

Signed-off-by: Gregory Fong <gregory.0xf0@...il.com>
---
I sent this a few months ago[1] but didn't really include enough info
about how to reproduce the problem.  This is indeed probably a very
unusual issue for someone to have, but sometimes people write braindead
scripts that do things like update ctime for no reason, and it can be
really hard to track down why the kernel build gets marked as '-dirty'
when there aren't any modifications to the tree if you're not intimately
familiar with the difference between git's plumbing and porcelain
commands.

[1] https://lkml.org/lkml/2015/3/10/793

 scripts/setlocalversion | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/scripts/setlocalversion b/scripts/setlocalversion
index 63d91e2..4ba52fc 100755
--- a/scripts/setlocalversion
+++ b/scripts/setlocalversion
@@ -45,6 +45,9 @@ scm_version()
 	# Check for git and a git repo.
 	if test -z "$(git rev-parse --show-cdup 2>/dev/null)" &&
 	   head=`git rev-parse --verify --short HEAD 2>/dev/null`; then
+		# In case ctime has changed but there are not actually any
+		# changes that would be committed.
+		git update-index -q --refresh
 
 		# If we are at a tagged commit (like "v2.6.30-rc6"), we ignore
 		# it, because this version is defined in the top level Makefile.
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ