Skip to content

Commit

Permalink
minstall: do not trample install_mode by rpath fixer
Browse files Browse the repository at this point in the history
install_mode can include the setuid bit, which has the special property
(mentioned in the set_mode logic for minstall itself) of needing to come
last, because it "will get wiped by chmod" (or at least chown).

In fact, it's not just chown that wipes setuid, but other changes as
well, such as the file contents. This is not an issue for install_data /
custom_target, but for compiled outputs, we run depfixer to handle
rpaths. This may or may not cause edits to the binary, depending on
whether we have a build rpath to wipe, or an install rpath to add. (We
also may run `strip`, but that external program already has its own mode
restoration logic.)

Fix this by switching the order of operations around, so that setting
the permissions happens last.

Fixes void-linux/void-packages#38682
  • Loading branch information
eli-schwartz committed Aug 18, 2022
1 parent 5ca5e0c commit f938861
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 1 deletion.
3 changes: 2 additions & 1 deletion mesonbuild/minstall.py
Original file line number Diff line number Diff line change
Expand Up @@ -693,7 +693,6 @@ def install_targets(self, d: InstallData, dm: DirMaker, destdir: str, fullprefix
raise MesonException(f'File {fname!r} could not be found')
elif os.path.isfile(fname):
file_copied = self.do_copyfile(fname, outname, makedirs=(dm, outdir))
self.set_mode(outname, install_mode, d.install_umask)
if should_strip and d.strip_bin is not None:
if fname.endswith('.jar'):
self.log('Not stripping jar target: {}'.format(os.path.basename(fname)))
Expand Down Expand Up @@ -723,6 +722,8 @@ def install_targets(self, d: InstallData, dm: DirMaker, destdir: str, fullprefix
pass
else:
raise
# file mode needs to be set last, after strip/depfixer editing
self.set_mode(outname, install_mode, d.install_umask)

def rebuild_all(wd: str) -> bool:
if not (Path(wd) / 'build.ninja').is_file():
Expand Down
1 change: 1 addition & 0 deletions test cases/common/190 install_mode/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ install_man('foo.1',
executable('trivialprog',
sources : 'trivial.c',
install : true,
build_rpath: meson.current_build_dir(),
install_mode : ['rwxr-sr-x', 'root', 'root'])

# test install_mode in static_library
Expand Down

0 comments on commit f938861

Please sign in to comment.