From a78cef0ed7ce15583424f5873f0aa6fdad1d5c2f Mon Sep 17 00:00:00 2001
From: Jing Chen <chjing@google.com>
Date: Thu, 3 Dec 2020 19:55:20 -0800
Subject: Implement command IPC_INFO for semctl.

PiperOrigin-RevId: 345589628
---
 pkg/sentry/kernel/semaphore/semaphore.go | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

(limited to 'pkg/sentry/kernel')

diff --git a/pkg/sentry/kernel/semaphore/semaphore.go b/pkg/sentry/kernel/semaphore/semaphore.go
index 335be8edd..31198d772 100644
--- a/pkg/sentry/kernel/semaphore/semaphore.go
+++ b/pkg/sentry/kernel/semaphore/semaphore.go
@@ -176,6 +176,22 @@ func (r *Registry) FindOrCreate(ctx context.Context, key, nsems int32, mode linu
 	return r.newSet(ctx, key, owner, owner, perms, nsems)
 }
 
+// IPCInfo returns information about system-wide semaphore limits and parameters.
+func (r *Registry) IPCInfo() *linux.SemInfo {
+	return &linux.SemInfo{
+		SemMap: linux.SEMMAP,
+		SemMni: linux.SEMMNI,
+		SemMns: linux.SEMMNS,
+		SemMnu: linux.SEMMNU,
+		SemMsl: linux.SEMMSL,
+		SemOpm: linux.SEMOPM,
+		SemUme: linux.SEMUME,
+		SemUsz: 0, // SemUsz not supported.
+		SemVmx: linux.SEMVMX,
+		SemAem: linux.SEMAEM,
+	}
+}
+
 // RemoveID removes set with give 'id' from the registry and marks the set as
 // dead. All waiters will be awakened and fail.
 func (r *Registry) RemoveID(id int32, creds *auth.Credentials) error {
-- 
cgit v1.2.3