in pkg/csi_mounter/csi_mounter.go [282:342]
func prepareMountOptions(options []string) ([]string, []string, map[string]int64, error) {
allowedOptions := map[string]bool{
"exec": true,
"noexec": true,
"atime": true,
"noatime": true,
"sync": true,
"async": true,
"dirsync": true,
}
csiMountOptions := []string{
"nodev",
"nosuid",
"allow_other",
"default_permissions",
"rootmode=40000",
fmt.Sprintf("user_id=%d", os.Getuid()),
fmt.Sprintf("group_id=%d", os.Getgid()),
}
// users may pass options that should be used by Linux mount(8),
// filter out these options and not pass to the sidecar mounter.
validMountOptions := []string{"rw", "ro"}
optionSet := sets.NewString(options...)
for _, o := range validMountOptions {
if optionSet.Has(o) {
csiMountOptions = append(csiMountOptions, o)
optionSet.Delete(o)
}
}
sysfsBDI := make(map[string]int64)
for _, o := range optionSet.List() {
if strings.HasPrefix(o, "o=") {
v := o[2:]
if allowedOptions[v] {
csiMountOptions = append(csiMountOptions, v)
} else {
klog.Warningf("got invalid mount option %q. Will discard invalid options and continue to mount.", v)
}
optionSet.Delete(o)
}
if readAheadKB := readAheadKBMountFlagRegex.FindStringSubmatch(o); len(readAheadKB) == 2 {
// There is only one matching pattern in readAheadKBMountFlagRegex
// If found, it will be at index 1
readAheadKBInt, err := strconv.ParseInt(readAheadKB[1], 10, 0)
if err != nil {
return nil, nil, nil, fmt.Errorf("invalid read_ahead_kb mount flag %q: %w", o, err)
}
if readAheadKBInt < 0 {
return nil, nil, nil, fmt.Errorf("invalid negative value for read_ahead_kb mount flag: %q", o)
}
sysfsBDI[readAheadKBMountFlag] = readAheadKBInt
optionSet.Delete(o)
}
}
return csiMountOptions, optionSet.List(), sysfsBDI, nil
}