From: "Daniel P. Berrangé" <berrange@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Daniel P. Berrangé" <berrange@redhat.com>,
"Michal Privoznik" <mprivozn@redhat.com>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>
Subject: [PULL 06/20] seccomp: Get actual errno value from failed seccomp functions
Date: Thu, 27 Oct 2022 18:30:49 +0100 [thread overview]
Message-ID: <20221027173103.299479-7-berrange@redhat.com> (raw)
In-Reply-To: <20221027173103.299479-1-berrange@redhat.com>
From: Michal Privoznik <mprivozn@redhat.com>
Upon failure, a libseccomp API returns actual errno value very
rarely. Fortunately, after its commit 34bf78ab (contained in
2.5.0 release), the SCMP_FLTATR_API_SYSRAWRC attribute can be set
which makes subsequent APIs return true errno on failure.
This is especially critical when seccomp_load() fails, because
generic -ECANCELED says nothing.
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
meson.build | 9 +++++++++
softmmu/qemu-seccomp.c | 13 +++++++++++++
2 files changed, 22 insertions(+)
diff --git a/meson.build b/meson.build
index b686dfef75..5f114c89d9 100644
--- a/meson.build
+++ b/meson.build
@@ -636,10 +636,16 @@ if vmnet.found() and not cc.has_header_symbol('vmnet/vmnet.h',
endif
seccomp = not_found
+seccomp_has_sysrawrc = false
if not get_option('seccomp').auto() or have_system or have_tools
seccomp = dependency('libseccomp', version: '>=2.3.0',
required: get_option('seccomp'),
method: 'pkg-config', kwargs: static_kwargs)
+ if seccomp.found()
+ seccomp_has_sysrawrc = cc.has_header_symbol('seccomp.h',
+ 'SCMP_FLTATR_API_SYSRAWRC',
+ dependencies: seccomp)
+ endif
endif
libcap_ng = not_found
@@ -1849,6 +1855,9 @@ config_host_data.set('CONFIG_RDMA', rdma.found())
config_host_data.set('CONFIG_SDL', sdl.found())
config_host_data.set('CONFIG_SDL_IMAGE', sdl_image.found())
config_host_data.set('CONFIG_SECCOMP', seccomp.found())
+if seccomp.found()
+ config_host_data.set('CONFIG_SECCOMP_SYSRAWRC', seccomp_has_sysrawrc)
+endif
config_host_data.set('CONFIG_SNAPPY', snappy.found())
config_host_data.set('CONFIG_TPM', have_tpm)
config_host_data.set('CONFIG_USB_LIBUSB', libusb.found())
diff --git a/softmmu/qemu-seccomp.c b/softmmu/qemu-seccomp.c
index deaf8a4ef5..d66a2a1226 100644
--- a/softmmu/qemu-seccomp.c
+++ b/softmmu/qemu-seccomp.c
@@ -312,6 +312,19 @@ static int seccomp_start(uint32_t seccomp_opts, Error **errp)
goto seccomp_return;
}
+#if defined(CONFIG_SECCOMP_SYSRAWRC)
+ /*
+ * This must be the first seccomp_attr_set() call to have full
+ * error propagation from subsequent seccomp APIs.
+ */
+ rc = seccomp_attr_set(ctx, SCMP_FLTATR_API_SYSRAWRC, 1);
+ if (rc != 0) {
+ error_setg_errno(errp, -rc,
+ "failed to set seccomp rawrc attribute");
+ goto seccomp_return;
+ }
+#endif
+
rc = seccomp_attr_set(ctx, SCMP_FLTATR_CTL_TSYNC, 1);
if (rc != 0) {
error_setg_errno(errp, -rc,
--
2.37.3
next prev parent reply other threads:[~2022-10-27 17:34 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-27 17:30 [PULL 00/20] Crypto and I/O patches Daniel P. Berrangé
2022-10-27 17:30 ` [PULL 01/20] crypto/luks: Support creating LUKS image on Darwin Daniel P. Berrangé
2022-10-27 17:30 ` [PULL 02/20] util/qemu-sockets: Use g_get_tmp_dir() to get the directory for temporary files Daniel P. Berrangé
2022-10-27 17:30 ` [PULL 03/20] io/channel-watch: Drop a superfluous '#ifdef WIN32' Daniel P. Berrangé
2022-10-27 17:30 ` [PULL 04/20] io/channel-watch: Drop the unnecessary cast Daniel P. Berrangé
2022-10-27 17:30 ` [PULL 05/20] io/channel-watch: Fix socket watch on Windows Daniel P. Berrangé
2022-10-27 17:30 ` Daniel P. Berrangé [this message]
2022-10-27 17:30 ` [PULL 07/20] scripts: check if .git exists before checking submodule status Daniel P. Berrangé
2022-10-27 17:30 ` [PULL 08/20] crypto: check for and report errors setting PSK credentials Daniel P. Berrangé
2022-10-27 17:30 ` [PULL 09/20] tests: avoid DOS line endings in PSK file Daniel P. Berrangé
2022-10-27 17:30 ` [PULL 10/20] crypto: sanity check that LUKS header strings are NUL-terminated Daniel P. Berrangé
2022-10-27 17:30 ` [PULL 11/20] crypto: enforce that LUKS stripes is always a fixed value Daniel P. Berrangé
2022-10-27 17:30 ` [PULL 12/20] crypto: enforce that key material doesn't overlap with LUKS header Daniel P. Berrangé
2022-10-27 17:30 ` [PULL 13/20] crypto: validate that LUKS payload doesn't overlap with header Daniel P. Berrangé
2022-10-27 17:30 ` [PULL 14/20] crypto: strengthen the check for key slots overlapping with LUKS header Daniel P. Berrangé
2022-10-27 17:30 ` [PULL 15/20] crypto: check that LUKS PBKDF2 iterations count is non-zero Daniel P. Berrangé
2022-10-27 17:30 ` [PULL 16/20] crypto: split LUKS header definitions off into file Daniel P. Berrangé
2022-10-27 17:31 ` [PULL 17/20] crypto: split off helpers for converting LUKS header endianess Daniel P. Berrangé
2022-10-27 17:31 ` [PULL 18/20] crypto: quote algorithm names in error messages Daniel P. Berrangé
2022-10-27 17:31 ` [PULL 19/20] crypto: ensure LUKS tests run with GNUTLS crypto provider Daniel P. Berrangé
2022-10-27 17:31 ` [PULL 20/20] crypto: add test cases for many malformed LUKS header scenarios Daniel P. Berrangé
2022-10-31 10:13 ` [PULL 00/20] Crypto and I/O patches Stefan Hajnoczi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20221027173103.299479-7-berrange@redhat.com \
--to=berrange@redhat.com \
--cc=mprivozn@redhat.com \
--cc=philmd@linaro.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.