mirror of
https://github.com/koverstreet/bcachefs-tools.git
synced 2025-01-22 00:04:31 +03:00
f407121d18
The unending stream of syzbot bug reports and overwrought filing of CVEs for corner case handling (i.e. things that distract from actual user complaints) in XFS has generated all sorts of of overheated rhetoric about how every bug is a Serious Security Issue(tm) because anyone can craft a malicious filesystem on a USB stick, insert the stick into a victim machine, and mount will trigger a bug in the kernel driver that leads to some compromise or DoS or something. I thought that nobody would be foolish enough to automount an XFS filesystem. What a fool I was! It turns out that udisks can be told that it's okay to automount things, and then GNOME will do exactly that. Including mounting mangled XFS filesystems! Same with bcachefs! <delete angry rant about poor decisionmaking and armchair fs developers blasting us on X while not actually doing any of the work> Turn off /this/ idiocy by adding a udev rule to tell udisks not to automount bcachefs filesystems. This will not stop a logged in user from unwittingly inserting a malicious storage device and pressing [mount] and getting breached. This is not a substitute for a thorough audit. This is not a substitute for lklfuse. This does not solve the general problem of in-kernel fs drivers being a huge attack surface. I just want to give Kent a break from some of the oceans of bu******. Signed-off-by: Darrick J. Wong <djwong@kernel.org> Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
258 lines
7.8 KiB
Makefile
258 lines
7.8 KiB
Makefile
VERSION=1.3.3
|
|
|
|
PREFIX?=/usr/local
|
|
PKG_CONFIG?=pkg-config
|
|
INSTALL=install
|
|
LN=ln
|
|
|
|
ifeq ("$(origin V)", "command line")
|
|
BUILD_VERBOSE = $(V)
|
|
endif
|
|
ifndef BUILD_VERBOSE
|
|
BUILD_VERBOSE = 0
|
|
endif
|
|
|
|
ifeq ($(BUILD_VERBOSE),1)
|
|
Q =
|
|
else
|
|
Q = @
|
|
endif
|
|
|
|
CFLAGS+=-std=gnu11 -O2 -g -MMD -Wall -fPIC \
|
|
-Wno-pointer-sign \
|
|
-Wno-deprecated-declarations \
|
|
-fno-strict-aliasing \
|
|
-fno-delete-null-pointer-checks \
|
|
-I. -Iinclude -Iraid \
|
|
-D_FILE_OFFSET_BITS=64 \
|
|
-D_GNU_SOURCE \
|
|
-D_LGPL_SOURCE \
|
|
-DRCU_MEMBARRIER \
|
|
-DZSTD_STATIC_LINKING_ONLY \
|
|
-DFUSE_USE_VERSION=32 \
|
|
-DNO_BCACHEFS_CHARDEV \
|
|
-DNO_BCACHEFS_FS \
|
|
-DNO_BCACHEFS_SYSFS \
|
|
-DVERSION_STRING='"$(VERSION)"' \
|
|
$(EXTRA_CFLAGS)
|
|
LDFLAGS+=$(CFLAGS) $(EXTRA_LDFLAGS)
|
|
|
|
ifdef CARGO_TOOLCHAIN_VERSION
|
|
CARGO_TOOLCHAIN = +$(CARGO_TOOLCHAIN_VERSION)
|
|
endif
|
|
|
|
CARGO_ARGS=${CARGO_TOOLCHAIN}
|
|
CARGO=cargo $(CARGO_ARGS)
|
|
CARGO_PROFILE=release
|
|
# CARGO_PROFILE=debug
|
|
|
|
CARGO_BUILD_ARGS=--$(CARGO_PROFILE)
|
|
CARGO_BUILD=$(CARGO) build $(CARGO_BUILD_ARGS)
|
|
|
|
include Makefile.compiler
|
|
|
|
CFLAGS+=$(call cc-disable-warning, unused-but-set-variable)
|
|
CFLAGS+=$(call cc-disable-warning, stringop-overflow)
|
|
CFLAGS+=$(call cc-disable-warning, zero-length-bounds)
|
|
CFLAGS+=$(call cc-disable-warning, missing-braces)
|
|
CFLAGS+=$(call cc-disable-warning, zero-length-array)
|
|
CFLAGS+=$(call cc-disable-warning, shift-overflow)
|
|
CFLAGS+=$(call cc-disable-warning, enum-conversion)
|
|
|
|
PKGCONFIG_LIBS="blkid uuid liburcu libsodium zlib liblz4 libzstd libudev libkeyutils udev"
|
|
ifdef BCACHEFS_FUSE
|
|
PKGCONFIG_LIBS+="fuse3 >= 3.7"
|
|
CFLAGS+=-DBCACHEFS_FUSE
|
|
endif
|
|
|
|
PKGCONFIG_CFLAGS:=$(shell $(PKG_CONFIG) --cflags $(PKGCONFIG_LIBS))
|
|
ifeq (,$(PKGCONFIG_CFLAGS))
|
|
$(error pkg-config error, command: $(PKG_CONFIG) --cflags $(PKGCONFIG_LIBS))
|
|
endif
|
|
PKGCONFIG_LDLIBS:=$(shell $(PKG_CONFIG) --libs $(PKGCONFIG_LIBS))
|
|
ifeq (,$(PKGCONFIG_LDLIBS))
|
|
$(error pkg-config error, command: $(PKG_CONFIG) --libs $(PKGCONFIG_LIBS))
|
|
endif
|
|
PKGCONFIG_UDEVRULESDIR:=$(shell $(PKG_CONFIG) --variable=udev_dir udev)
|
|
ifeq (,$(PKGCONFIG_UDEVRULESDIR))
|
|
$(error pkg-config error, command: $(PKG_CONFIG) --variable=udev_dir udev)
|
|
endif
|
|
|
|
CFLAGS+=$(PKGCONFIG_CFLAGS)
|
|
LDLIBS+=$(PKGCONFIG_LDLIBS)
|
|
LDLIBS+=-lm -lpthread -lrt -lkeyutils -laio -ldl
|
|
LDLIBS+=$(EXTRA_LDLIBS)
|
|
|
|
ifeq ($(PREFIX),/usr)
|
|
ROOT_SBINDIR?=/sbin
|
|
INITRAMFS_DIR=$(PREFIX)/share/initramfs-tools
|
|
else
|
|
ROOT_SBINDIR?=$(PREFIX)/sbin
|
|
INITRAMFS_DIR=/etc/initramfs-tools
|
|
endif
|
|
|
|
.PHONY: all
|
|
all: bcachefs
|
|
|
|
.PHONY: debug
|
|
debug: CFLAGS+=-Werror -DCONFIG_BCACHEFS_DEBUG=y -DCONFIG_VALGRIND=y
|
|
debug: bcachefs
|
|
|
|
.PHONY: tests
|
|
tests: tests/test_helper
|
|
|
|
.PHONY: TAGS tags
|
|
TAGS:
|
|
ctags -e -R .
|
|
|
|
tags:
|
|
ctags -R .
|
|
|
|
SRCS=$(sort $(shell find . -type f ! -path '*/.*/*' -iname '*.c'))
|
|
DEPS=$(SRCS:.c=.d)
|
|
-include $(DEPS)
|
|
|
|
OBJS=$(SRCS:.c=.o)
|
|
|
|
%.o: %.c
|
|
@echo " [CC] $@"
|
|
$(Q)$(CC) $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
|
|
|
|
BCACHEFS_DEPS=libbcachefs.a
|
|
|
|
ifndef NO_RUST
|
|
BCACHEFS_DEPS+=rust-src/target/release/libbcachefs_rust.a
|
|
else
|
|
CFLAGS+=-DBCACHEFS_NO_RUST
|
|
endif
|
|
|
|
bcachefs: $(BCACHEFS_DEPS)
|
|
@echo " [LD] $@"
|
|
$(Q)$(CC) $(LDFLAGS) -Wl,--whole-archive $+ $(LOADLIBES) -Wl,--no-whole-archive $(LDLIBS) -o $@
|
|
|
|
libbcachefs.a: $(filter-out ./tests/%.o, $(OBJS))
|
|
@echo " [AR] $@"
|
|
$(Q)ar -rc $@ $+
|
|
|
|
RUST_SRCS=$(shell find rust-src/src rust-src/bch_bindgen/src -type f -iname '*.rs')
|
|
rust-src/target/release/libbcachefs_rust.a: $(RUST_SRCS)
|
|
$(CARGO_BUILD) --manifest-path rust-src/Cargo.toml
|
|
|
|
tests/test_helper: $(filter ./tests/%.o, $(OBJS))
|
|
@echo " [LD] $@"
|
|
$(Q)$(CC) $(LDFLAGS) $+ $(LOADLIBES) $(LDLIBS) -o $@
|
|
|
|
# If the version string differs from the last build, update the last version
|
|
ifneq ($(VERSION),$(shell cat .version 2>/dev/null))
|
|
.PHONY: .version
|
|
endif
|
|
.version:
|
|
@echo " [VERS] $@"
|
|
$(Q)echo '$(VERSION)' > $@
|
|
|
|
# Rebuild the 'version' command any time the version string changes
|
|
cmd_version.o : .version
|
|
|
|
.PHONY: install
|
|
install: INITRAMFS_HOOK=$(INITRAMFS_DIR)/hooks/bcachefs
|
|
install: INITRAMFS_SCRIPT=$(INITRAMFS_DIR)/scripts/local-premount/bcachefs
|
|
install: bcachefs
|
|
$(INSTALL) -m0755 -D bcachefs -t $(DESTDIR)$(ROOT_SBINDIR)
|
|
$(INSTALL) -m0644 -D bcachefs.8 -t $(DESTDIR)$(PREFIX)/share/man/man8/
|
|
$(INSTALL) -m0755 -D initramfs/script $(DESTDIR)$(INITRAMFS_SCRIPT)
|
|
$(INSTALL) -m0755 -D initramfs/hook $(DESTDIR)$(INITRAMFS_HOOK)
|
|
$(INSTALL) -m0644 -D udev/bcachefs.rules -t $(DESTDIR)$(PKGCONFIG_UDEVRULESDIR)/
|
|
$(LN) -sfr $(DESTDIR)$(ROOT_SBINDIR)/bcachefs $(DESTDIR)$(ROOT_SBINDIR)/mkfs.bcachefs
|
|
$(LN) -sfr $(DESTDIR)$(ROOT_SBINDIR)/bcachefs $(DESTDIR)$(ROOT_SBINDIR)/fsck.bcachefs
|
|
$(LN) -sfr $(DESTDIR)$(ROOT_SBINDIR)/bcachefs $(DESTDIR)$(ROOT_SBINDIR)/mount.bcachefs
|
|
$(LN) -sfr $(DESTDIR)$(ROOT_SBINDIR)/bcachefs $(DESTDIR)$(ROOT_SBINDIR)/mkfs.fuse.bcachefs
|
|
$(LN) -sfr $(DESTDIR)$(ROOT_SBINDIR)/bcachefs $(DESTDIR)$(ROOT_SBINDIR)/fsck.fuse.bcachefs
|
|
$(LN) -sfr $(DESTDIR)$(ROOT_SBINDIR)/bcachefs $(DESTDIR)$(ROOT_SBINDIR)/mount.fuse.bcachefs
|
|
|
|
sed -i '/^# Note: make install replaces/,$$d' $(DESTDIR)$(INITRAMFS_HOOK)
|
|
echo "copy_exec $(ROOT_SBINDIR)/bcachefs /sbin/bcachefs" >> $(DESTDIR)$(INITRAMFS_HOOK)
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
@echo "Cleaning all"
|
|
$(Q)$(RM) bcachefs libbcachefs.a tests/test_helper .version *.tar.xz $(OBJS) $(DEPS) $(DOCGENERATED)
|
|
$(Q)$(RM) -rf rust-src/*/target
|
|
|
|
.PHONY: deb
|
|
deb: all
|
|
debuild -us -uc -nc -b -i -I
|
|
|
|
.PHONY: rpm
|
|
rpm: clean
|
|
rpmbuild --build-in-place -bb --define "_version $(subst -,_,$(VERSION))" packaging/bcachefs-tools.spec
|
|
|
|
bcachefs-principles-of-operation.pdf: doc/bcachefs-principles-of-operation.tex
|
|
pdflatex doc/bcachefs-principles-of-operation.tex
|
|
pdflatex doc/bcachefs-principles-of-operation.tex
|
|
|
|
doc: bcachefs-principles-of-operation.pdf
|
|
|
|
.PHONY: cargo-update-msrv
|
|
cargo-update-msrv:
|
|
cargo +nightly generate-lockfile --manifest-path rust-src/Cargo.toml -Zmsrv-policy
|
|
cargo +nightly generate-lockfile --manifest-path rust-src/bch_bindgen/Cargo.toml -Zmsrv-policy
|
|
|
|
.PHONY: update-bcachefs-sources
|
|
update-bcachefs-sources:
|
|
git rm -rf --ignore-unmatch libbcachefs
|
|
test -d libbcachefs || mkdir libbcachefs
|
|
cp $(LINUX_DIR)/fs/bcachefs/*.[ch] libbcachefs/
|
|
git add libbcachefs/*.[ch]
|
|
cp $(LINUX_DIR)/include/linux/closure.h include/linux/
|
|
git add include/linux/closure.h
|
|
cp $(LINUX_DIR)/lib/closure.c linux/
|
|
git add linux/closure.c
|
|
cp $(LINUX_DIR)/include/linux/xxhash.h include/linux/
|
|
git add include/linux/xxhash.h
|
|
cp $(LINUX_DIR)/lib/xxhash.c linux/
|
|
git add linux/xxhash.c
|
|
cp $(LINUX_DIR)/include/linux/list_nulls.h include/linux/
|
|
git add include/linux/list_nulls.h
|
|
cp $(LINUX_DIR)/include/linux/poison.h include/linux/
|
|
git add include/linux/poison.h
|
|
cp $(LINUX_DIR)/include/linux/generic-radix-tree.h include/linux/
|
|
git add include/linux/generic-radix-tree.h
|
|
cp $(LINUX_DIR)/lib/generic-radix-tree.c linux/
|
|
git add linux/generic-radix-tree.c
|
|
cp $(LINUX_DIR)/include/linux/kmemleak.h include/linux/
|
|
git add include/linux/kmemleak.h
|
|
cp $(LINUX_DIR)/lib/math/int_sqrt.c linux/
|
|
git add linux/int_sqrt.c
|
|
rm libbcachefs/mean_and_variance_test.c
|
|
# cp $(LINUX_DIR)/lib/math/mean_and_variance.c linux/
|
|
# git add linux/mean_and_variance.c
|
|
# cp $(LINUX_DIR)/include/linux/mean_and_variance.h include/linux/
|
|
# git add include/linux/mean_and_variance.h
|
|
cp $(LINUX_DIR)/scripts/Makefile.compiler ./
|
|
git add Makefile.compiler
|
|
$(RM) libbcachefs/*.mod.c
|
|
git -C $(LINUX_DIR) rev-parse HEAD | tee .bcachefs_revision
|
|
git add .bcachefs_revision
|
|
|
|
|
|
.PHONY: update-commit-bcachefs-sources
|
|
update-commit-bcachefs-sources: update-bcachefs-sources
|
|
git commit -m "Update bcachefs sources to $(shell git -C $(LINUX_DIR) show --oneline --no-patch)"
|
|
|
|
SRCTARXZ = bcachefs-tools-$(VERSION).tar.xz
|
|
SRCDIR=bcachefs-tools-$(VERSION)
|
|
|
|
.PHONY: tarball
|
|
tarball: $(SRCTARXZ)
|
|
|
|
$(SRCTARXZ) : .gitcensus
|
|
$(Q)tar --transform "s,^,$(SRCDIR)/," -Jcf $(SRCDIR).tar.xz \
|
|
`cat .gitcensus`
|
|
@echo Wrote: $@
|
|
|
|
.PHONY: .gitcensus
|
|
.gitcensus:
|
|
$(Q)if test -d .git; then \
|
|
git ls-files > .gitcensus; \
|
|
fi
|