aboutsummaryrefslogtreecommitdiffhomepage
path: root/sandbox/overflow.go
blob: ebaad7041d5d691c169ee5330cbe087dde438803 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package sandbox

import (
	"bytes"
	"log"
	"os"
	"strconv"
	"sync"
)

var (
	ofUid  int
	ofGid  int
	ofOnce sync.Once
)

const (
	ofUidPath = "/proc/sys/kernel/overflowuid"
	ofGidPath = "/proc/sys/kernel/overflowgid"
)

func mustReadOverflow() {
	if v, err := os.ReadFile(ofUidPath); err != nil {
		log.Fatalf("cannot read %q: %v", ofUidPath, err)
	} else if ofUid, err = strconv.Atoi(string(bytes.TrimSpace(v))); err != nil {
		log.Fatalf("cannot interpret %q: %v", ofUidPath, err)
	}

	if v, err := os.ReadFile(ofGidPath); err != nil {
		log.Fatalf("cannot read %q: %v", ofGidPath, err)
	} else if ofGid, err = strconv.Atoi(string(bytes.TrimSpace(v))); err != nil {
		log.Fatalf("cannot interpret %q: %v", ofGidPath, err)
	}
}

func OverflowUid() int { ofOnce.Do(mustReadOverflow); return ofUid }
func OverflowGid() int { ofOnce.Do(mustReadOverflow); return ofGid }