summaryrefslogtreecommitdiffstats
path: root/usr.sbin/freebsd-update
diff options
context:
space:
mode:
authorcperciva <cperciva@FreeBSD.org>2014-12-22 21:52:37 +0000
committercperciva <cperciva@FreeBSD.org>2014-12-22 21:52:37 +0000
commitee1c8c70232afef1f3b891c75a01135d8da02300 (patch)
treed1383ed5cf68d8688f0bdfb27167bc602acee703 /usr.sbin/freebsd-update
parent36f227ffaf9177fc4e28aa2e93068af2044a12f2 (diff)
downloadFreeBSD-src-ee1c8c70232afef1f3b891c75a01135d8da02300.zip
FreeBSD-src-ee1c8c70232afef1f3b891c75a01135d8da02300.tar.gz
Strip trailing / characters from paths in "not present" index entries, not
just "directory" entries. Prior to this commit, if / was added as part of a security update (how? In the most recent case, because lib32 was accidentally omitted and was then re-added, and every installer distribution set gets its own paths) then the code which was supposed to filter out updates to deleted parts of the base system (if someone decides to delete / then we shouldn't re-create it for them) would instead get confused and decided that while / should exist, // should not exist and needs to be removed. This fixes the bug which caused freebsd-update to want to delete / (which is harmless, since `rm /` fails, but scary nonetheless). A workaround is being applied to the update bits in order to avoid triggering the bug on unpatched systems. PR: 196055, 196091, 196147
Diffstat (limited to 'usr.sbin/freebsd-update')
-rw-r--r--usr.sbin/freebsd-update/freebsd-update.sh1
1 files changed, 1 insertions, 0 deletions
diff --git a/usr.sbin/freebsd-update/freebsd-update.sh b/usr.sbin/freebsd-update/freebsd-update.sh
index f586909..57ea251 100644
--- a/usr.sbin/freebsd-update/freebsd-update.sh
+++ b/usr.sbin/freebsd-update/freebsd-update.sh
@@ -1395,6 +1395,7 @@ fetch_filter_metadata () {
# matter, since we add a leading "/" when we use paths later.
cut -f 3- -d '|' $1 |
sed -e 's,/|d|,|d|,' |
+ sed -e 's,/|-|,|-|,' |
sort -u > $1.tmp
# Figure out which lines to ignore and remove them.
OpenPOWER on IntegriCloud