[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[RESEND PATCH v1] xen/xsm: flask: restore sidtab state on policy load failure


  • To: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Sergiy Kibrik <Sergiy_Kibrik@xxxxxxxx>
  • Date: Fri, 2 Oct 2026 09:26:17 +0000
  • Accept-language: en-US
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=epam.com; dmarc=pass action=none header.from=epam.com; dkim=pass header.d=epam.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=d7s6X6WnuV0kG9p5KD1YOj8CZuFMb3B7X9fzXZUv7PQ=; b=OQxGeSm/Xi/g4EreMc6bnL9rr118W2N/WRDWGJ2EniwoYZi7vliuw7wnvQSiAeM3ZulNmjbV3tD4/mHaA7H+wSZAYE6S7QOeneho3H31L/cuDGgpTn4hpXPRpBlfu8b/8tFMbRRtJ3Y/j7yy/A339pP3uV2BG6qdnIG74qGo90FrSbWNMU5vFmOqawwUNHQbMEbS23w5hrgvqkXqYCT3cERaWkDlHn8IePHgmeVqa4j0aEHShYj30dZ8eUZdtEe5VNnGobrxGmgntFWRutozZe+HhOMD9yYhrADYrbnw382KQEoZNWPKjEPHsvBWDvFn6k6cRK00Apq+0BDG4sMQmw==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=MUsGhvAguR8F/Ll81hLaK4IyT00ep3gD+TIhJh6AQLSJ6QvJK7G0cAW6jQZIUPtsHooG1s8V3GVrtigqLMROwNAEpRK4Ni8MZYmIlM22D02uj7CQPjBjwgTl7ApdIFGSlbzfHqnnj0AuF2E31yYQYSeTA0W26QrCTsfqiynUZABuUgnRH4ERQrCEH/2MKhPU3iigr+FGBHbm6nxiDGrJ/c+N7mjKJzEmjZl0Uedg53GsDAg5zaQNnFcS3L+bIOYmyG8MqOpMh17Qk60oINPtiCRCdGomyw5seLyler0Q99uZgwAvMWDWkcZ+A8IxuWvDEbIzsf10DlEjgD6z+Nq01g==
  • Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=epam.com header.i="@epam.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:x-ms-exchange-senderadcheck"
  • Authentication-results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=epam.com;
  • Cc: Sergiy Kibrik <Sergiy_Kibrik@xxxxxxxx>, "Daniel P. Smith" <dpsmith@xxxxxxxxxxxxxxxxxxxx>
  • Delivery-date: Fri, 02 Oct 2026 09:26:23 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Thread-index: AQHdUlATCy0sfywDV06Ga65AkQTQHA==
  • Thread-topic: [RESEND PATCH v1] xen/xsm: flask: restore sidtab state on policy load failure

Error path of failed sidtab_map() leaves global sidtab in shutdown state and
from that point system is unable to allocate new SIDs in 
sidtab_context_to_sid().
To restore sidtab state new function sidtab_activate() is introduced, which only
resets shutdown flag, rewinding effect of sidtab_shutdown().

Signed-off-by: Sergiy Kibrik <Sergiy_Kibrik@xxxxxxxx>
---
New function is not strictly required, this also can be achieved just by
doing sidtab_set(&sidtab, &sidtab), but this way we would rely on its
undocumented internal behaviour.
---
 xen/xsm/flask/ss/services.c | 1 +
 xen/xsm/flask/ss/sidtab.c   | 7 +++++++
 xen/xsm/flask/ss/sidtab.h   | 1 +
 3 files changed, 9 insertions(+)

diff --git a/xen/xsm/flask/ss/services.c b/xen/xsm/flask/ss/services.c
index 35ad1034ca..f5cee1e0b0 100644
--- a/xen/xsm/flask/ss/services.c
+++ b/xen/xsm/flask/ss/services.c
@@ -1427,6 +1427,7 @@ int security_load_policy(const void *data, size_t len)
     if ( sidtab_map(&sidtab, clone_sid, &newsidtab) )
     {
         rc = -ENOMEM;
+        sidtab_activate(&sidtab);
         goto err;
     }
 
diff --git a/xen/xsm/flask/ss/sidtab.c b/xen/xsm/flask/ss/sidtab.c
index 69fc3389b3..5d1653cd02 100644
--- a/xen/xsm/flask/ss/sidtab.c
+++ b/xen/xsm/flask/ss/sidtab.c
@@ -314,6 +314,13 @@ void sidtab_set(struct sidtab *dst, struct sidtab *src)
     SIDTAB_UNLOCK(src);
 }
 
+void sidtab_activate(struct sidtab *s)
+{
+    SIDTAB_LOCK(s);
+    s->shutdown = 0;
+    SIDTAB_UNLOCK(s);
+}
+
 void sidtab_shutdown(struct sidtab *s)
 {
     SIDTAB_LOCK(s);
diff --git a/xen/xsm/flask/ss/sidtab.h b/xen/xsm/flask/ss/sidtab.h
index 0e48ec6eae..5d2dc9c7e1 100644
--- a/xen/xsm/flask/ss/sidtab.h
+++ b/xen/xsm/flask/ss/sidtab.h
@@ -48,6 +48,7 @@ int sidtab_context_to_sid(struct sidtab *s, struct context 
*context, u32 *sid);
 void sidtab_hash_eval(struct sidtab *h, char *tag);
 void sidtab_destroy(struct sidtab *s);
 void sidtab_set(struct sidtab *dst, struct sidtab *src);
+void sidtab_activate(struct sidtab *s);
 void sidtab_shutdown(struct sidtab *s);
 
 #endif    /* _SS_SIDTAB_H_ */
-- 
2.43.0

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.