qemu-git
The setuid permission on qemu-bridge-helper is a legitimate requirement for network functionality and is a known, documented exception in QEMU packaging.
Triggered rules
llm_review
The static rules flagged this MEDIUM, but an AI model (qwen/qwen3-235b-a22b-2507) reviewed the full PKGBUILD and judged it LOW (confidence 95%): The setuid permission on qemu-bridge-helper is a legitimate requirement for network functionality and is a known, documented exception in QEMU packaging.
1 higher static finding superseded - not the current verdict (shown for transparency)
privileged_install
The package grants elevated privileges or installs an update path outside pacman: a /etc/sudoers.d rule (often passwordless), a setuid/setgid binary, or a self-update script/service that can fetch and run future code with no checksum verification. The initial install may be verified, but the ongoing privilege + update surface is a real supply-chain / privilege-escalation risk.
-
PKGBUILD:277
chmod u+s qemu/qemu-bridge-helper
PKGBUILD
1 offending line(s) highlighted# Maintainer: Frederic Bezies <fredbezies@gmail.com>
# Contributor: ajs124 < aur at ajs124 dot de>
# Contributor: Devin Cofer <ranguvar{AT]archlinux[DOT}us>
# Contributor: Tobias Powalowski <tpowa@archlinux.org>
# Contributor: David Runge <dvzrv@archlinux.org>
# Contributor: Sébastien "Seblu" Luttringer <seblu@seblu.net>
pkgbase=qemu-git
_gitname=qemu
pkgname=(
qemu-git
qemu-headless-git
qemu-arch-extra-git
qemu-headless-arch-extra-git
qemu-block-iscsi-git
qemu-guest-agent-git
)
pkgdesc="A generic and open source machine emulator and virtualizer. Git version."
pkgver=11.1.0.r1168.gff1d2d19d7
pkgrel=1
epoch=29
arch=(i686 x86_64)
license=(GPL-2.0-or-later LGPL-2.1-or-later)
url="https://wiki.qemu.org/"
# TODO: consider providing rdma-core
# TODO: consider providing lzfse
makedepends=(
alsa-lib
brltty
bzip2
cairo
capstone
curl
cdrtools
dtc
fuse3
gcc-libs
gdk-pixbuf2
git
glib2
gnutls
gtk3
jack
libaio
libbpf
libcacard
libcap-ng
libepoxy
libiscsi
libnfs
libpng
libpulse
libsasl
libseccomp
libslirp
libssh
liburing
libusb
libx11
libxkbcommon
lzo
mesa
meson
ncurses
ndctl
numactl
pam
pixman
python
python-sphinx
python-sphinx_rtd_theme
sdl2
sdl2_image
seabios
snappy
spice-protocol
spice
systemd
usbredir
vde2
virglrenderer
vte3 libvte-2.91.so
xfsprogs
zlib
zstd
)
options=(!debug !lto)
source=(git+https://gitlab.com/qemu-project/qemu.git
qemu-guest-agent.service
65-kvm.rules)
sha256sums=('SKIP'
'c39bcde4a09165e64419fd2033b3532378bba84d509d39e2d51694d44c1f8d88'
'a66f0e791b16b03b91049aac61a25950d93e962e1b2ba64a38c6ad7f609b532c')
case $CARCH in
i?86) _corearch=i386 ;;
x86_64) _corearch=x86_64 ;;
esac
pkgver() {
cd "${srcdir}/${_gitname}"
git describe --long --tags | sed 's/\([^-]*-g\)/r\1/;s/-/./g' | cut -c2-47
}
prepare() {
cd "${srcdir}/${_gitname}"
mkdir build-{full,headless}
mkdir -p extra-arch-{full,headless}/usr/{bin,share/qemu}
}
build() {
_build full
_build headless \
--audio-drv-list= \
--disable-gtk \
--disable-vte \
--disable-brlapi \
--disable-opengl \
--disable-dbus-display \
--disable-virglrenderer \
--disable-alsa \
--disable-jack \
--disable-oss \
--disable-pa \
--disable-sdl
}
_build() (
cd ${srcdir}/${_gitname}/build-$1
../configure \
--prefix=/usr \
--sysconfdir=/etc \
--localstatedir=/var \
--libexecdir=/usr/lib/qemu \
--smbd=/usr/bin/smbd \
--enable-modules \
--enable-sdl \
--disable-werror #\
#"${@:2}"
ninja
)
package_qemu-git() {
pkgdesc="QEMU Git version."
depends=(
alsa-lib libasound.so
bzip2 libbz2.so
cairo
capstone
curl libcurl.so
dtc
fuse3
gcc-libs
gdk-pixbuf2 libgdk_pixbuf-2.0.so
glib2 libgio-2.0.so libglib-2.0.so libgmodule-2.0.so libgobject-2.0.so
gnutls
gtk3 libgdk-3.so libgtk-3.so
jack libjack.so
libaio
libbpf libbpf.so
libcacard
libcap-ng libcap-ng.so
libepoxy
libjpeg-turbo libjpeg.so
libnfs
libpng
libpulse libpulse.so
libsasl
libseccomp libseccomp.so
libslirp libslirp.so
libssh libssh.so
libusb libusb-1.0.so
liburing liburing.so
libx11
libxdp
libxkbcommon libxkbcommon.so
lzo
mesa
ncurses libncursesw.so
ndctl
numactl libnuma.so
pam libpam.so
pixman libpixman-1.so
seabios
sdl2
sdl2_image
snappy
spice libspice-server.so
systemd-libs libudev.so
usbredir
virglrenderer
vde2
vte3 libvte-2.91.so
zlib
zstd libzstd.so
)
optdepends=(
'brltty: for braille device support'
'qemu-arch-extra-git: extra architectures support'
)
conflicts=('qemu-headless' 'qemu' 'qemu-desktop')
provides=('qemu-headless' 'qemu')
_package full
}
package_qemu-headless-git() {
pkgdesc="QEMU without GUI. Git version."
depends=(
bzip2 libbz2.so
curl libcurl.so
dtc
fuse3
gcc-libs
glib2 libgio-2.0.so libglib-2.0.so libgmodule-2.0.so libgobject-2.0.so
gnutls
libaio
libbpf libbpf.so
libcacard
libcap-ng libcap-ng.so
libjpeg-turbo libjpeg.so
libnfs
libpng
libsasl
libseccomp libseccomp.so
libslirp libslirp.so
libssh libssh.so
libusb libusb-1.0.so
liburing liburing.so
libxkbcommon libxkbcommon.so
lzo
ndctl
numactl libnuma.so
ncurses libncursesw.so
pam libpam.so
pixman libpixman-1.so
seabios
snappy
spice libspice-server.so
systemd-libs libudev.so
usbredir
vde2
zlib
zstd libzstd.so
)
optdepends=('qemu-headless-arch-extra-git: extra architectures support')
conflicts=('qemu-headless' 'qemu' 'qemu-base')
provides=('qemu-headless' 'qemu')
_package headless
}
_package() {
optdepends+=('ovmf: Tianocore UEFI firmware for qemu'
'samba: SMB/CIFS server support'
'qemu-block-iscsi-git: iSCSI block support')
install=qemu.install
options=(!strip !emptydirs)
DESTDIR="$pkgdir" ninja -C "${srcdir}/${_gitname}/build-$1" install "${@:2}"
# systemd stuff
install -Dm644 65-kvm.rules "$pkgdir/usr/lib/udev/rules.d/65-kvm.rules"
# remove conflicting /var/run directory
cd "$pkgdir"
rm -r var
cd usr/lib
# bridge_helper needs suid
# https://bugs.archlinux.org/task/32565
chmod u+s qemu/qemu-bridge-helper
# remove split block modules
rm qemu/block-iscsi.so
cd ../bin
# remove extra arch
for _bin in qemu-*; do
[[ -f $_bin ]] || continue
case ${_bin#qemu-} in
# guest agent
ga) rm "$_bin"; continue ;;
# tools
edid|img|io|keymap|nbd|pr-helper|storage-daemon) continue ;;
# core emu
system-${_corearch}) continue ;;
esac
mv "$_bin" "$srcdir/$_gitname/extra-arch-$1/usr/bin"
done
cd ../share/qemu
for _blob in *; do
[[ -f $_blob ]] || continue
case $_blob in
# provided by seabios package
bios.bin|bios-256k.bin|vgabios-cirrus.bin|vgabios-qxl.bin|\
vgabios-stdvga.bin|vgabios-vmware.bin|vgabios-virtio.bin|vgabios-bochs-display.bin|\
vgabios-ramfb.bin|bios-microvm.bin|vgabios-ati.bin) rm "$_blob"; continue ;;
# provided by edk2-ovmf package
edk2-*) rm "$_blob"; continue ;;
# iPXE ROMs
efi-*|pxe-*) continue ;;
# core blobs
bios-microvm.bin|kvmvapic.bin|linuxboot*|multiboot.bin|sgabios.bin|vgabios*) continue ;;
# Trace events definitions
trace-events*) continue ;;
esac
mv "$_blob" "$srcdir/$_gitname/extra-arch-$1/usr/share/qemu"
done
# provided by edk2-ovmf package
rm -r firmware
cd ..
if [ "$1" = headless ]; then rm -r {applications,icons}; fi
}
package_qemu-arch-extra-git() {
pkgdesc="QEMU for foreign architectures. Git version."
depends=(
dtc
fuse3
gcc-libs
gnutls
libaio
libbpf libbpf.so
glib2 libgio-2.0.so libglib-2.0.so libgobject-2.0.so libgmodule-2.0.so
libjpeg-turbo libjpeg.so
libpng
libsasl
libseccomp libseccomp.so
libslirp libslirp.so
liburing liburing.so
lzo
ndctl
numactl libnuma.so
pam libpam.so
pixman libpixman-1.so
snappy
systemd-libs
libudev.so
qemu-git
vde2
zlib
zstd
libzstd.so
)
optdepends=(
'edk2-armvirt: for aarch64 UEFI support'
'edk2-ovmf: for ia32 and x64 UEFI support'
)
options=(!strip)
provides=(qemu-arch-extra)
conflicts=(qemu-arch-extra qemu-emulators-full)
mv -v "$srcdir/$_gitname/extra-arch-full/usr" "$pkgdir"
}
package_qemu-headless-arch-extra-git() {
pkgdesc="QEMU without GUI, for foreign architectures. Git version."
depends=(
dtc
fuse3
gcc-libs
gnutls
libaio
libbpf libbpf.so
glib2 libgio-2.0.so libglib-2.0.so libgobject-2.0.so libgmodule-2.0.so
libjpeg-turbo libjpeg.so
libpng
libsasl
libseccomp libseccomp.so
libslirp libslirp.so
liburing liburing.so
lzo
ndctl
numactl libnuma.so
pam libpam.so
pixman libpixman-1.so
snappy
qemu-headless-git
systemd-libs libudev.so
vde2
zlib
zstd libzstd.so
)
optdepends=(
'edk2-armvirt: for aarch64 UEFI support'
'edk2-ovmf: for ia32 and x64 UEFI support'
)
options=(!strip)
conflicts=(qemu-headless-arch-extra qemu-emulators-full)
provides=(qemu-headless-arch-extra)
mv -v "$srcdir/$_gitname/extra-arch-headless/usr" "$pkgdir"
}
package_qemu-block-iscsi-git() {
pkgdesc="QEMU iSCSI block module. Git version."
depends=(glibc libiscsi)
conflicts=(qemu-block-iscsi)
provides=(qemu-block-iscsi)
install -vDm 755 "$srcdir/$_gitname/build-full/block-iscsi.so" -t "$pkgdir/usr/lib/qemu/"
}
package_qemu-guest-agent-git() {
pkgdesc="QEMU Guest Agent. Git version."
depends=(gcc-libs glib2 libudev.so liburing)
conflicts=(qemu-guest-agent)
provides=(qemu-guest-agent)
install=qemu-guest-agent.install
install -vDm 755 "$srcdir/$_gitname/build-full/qga/qemu-ga" -t "$pkgdir/usr/bin/"
install -vDm 644 "$srcdir/qemu-guest-agent.service" -t "$pkgdir/usr/lib/systemd/system/"
install -vDm 755 "$srcdir/$_gitname/scripts/qemu-guest-agent/fsfreeze-hook" -t "$pkgdir/etc/qemu/"
}
# vim:set ts=2 sw=2 et:
Changes since previous scan
--- PKGBUILD @ 2026-09-05 00:16+++ PKGBUILD @ 2026-09-17 00:27@@ -16,7 +16,7 @@ qemu-guest-agent-git ) pkgdesc="A generic and open source machine emulator and virtualizer. Git version."-pkgver=11.1.0.r97.gd5393e5a03+pkgver=11.1.0.r1168.gff1d2d19d7 pkgrel=1 epoch=29 arch=(i686 x86_64)@@ -165,7 +165,7 @@ libcacard libcap-ng libcap-ng.so libepoxy- libjpeg libjpeg.so+ libjpeg-turbo libjpeg.so libnfs libpng libpulse libpulse.so@@ -222,7 +222,7 @@ libbpf libbpf.so libcacard libcap-ng libcap-ng.so- libjpeg libjpeg.so+ libjpeg-turbo libjpeg.so libnfs libpng libsasl@@ -342,7 +342,7 @@ libaio libbpf libbpf.so glib2 libgio-2.0.so libglib-2.0.so libgobject-2.0.so libgmodule-2.0.so- libjpeg libjpeg.so+ libjpeg-turbo libjpeg.so libpng libsasl libseccomp libseccomp.so@@ -383,7 +383,7 @@ libaio libbpf libbpf.so glib2 libgio-2.0.so libglib-2.0.so libgobject-2.0.so libgmodule-2.0.so- libjpeg libjpeg.so+ libjpeg-turbo libjpeg.so libpng libsasl libseccomp libseccomp.soScan history
| Scanned at (UTC) | Severity | Rules |
|---|---|---|
| 2026-09-17 00:27:14 | Low | 2 |
| 2026-09-16 00:03:17 | Low | 2 |
| 2026-09-15 00:25:31 | Low | 2 |
| 2026-09-14 00:27:57 | Low | 2 |
| 2026-09-13 00:19:54 | Low | 2 |
| 2026-09-12 00:25:17 | Low | 2 |
| 2026-09-11 00:19:22 | Low | 2 |
| 2026-09-10 00:22:44 | Low | 2 |
| 2026-09-09 00:04:09 | Low | 2 |
| 2026-09-08 00:18:08 | Low | 2 |
| 2026-09-07 00:30:15 | Low | 2 |
| 2026-09-06 00:17:06 | Low | 2 |
| 2026-09-05 14:00:22 | Medium | 1 |
| 2026-09-05 00:16:27 | Low | 2 |
| 2026-09-04 00:03:13 | Low | 2 |
| 2026-09-03 00:15:47 | Low | 2 |
| 2026-09-02 00:02:31 | Low | 2 |
| 2026-09-01 00:11:19 | Low | 2 |
| 2026-08-31 00:19:57 | Low | 2 |
| 2026-08-30 00:04:14 | Low | 2 |