@@ -88,7 +88,11 @@ func (mgr *NamespaceManager) NewPodNamespaces(cfg *PodNamespacesConfig) ([]Names
88
88
}
89
89
90
90
if len (cfg .Sysctls ) != 0 {
91
- pinnsArgs = append (pinnsArgs , "-s" , getSysctlForPinns (cfg .Sysctls ))
91
+ pinnsSysctls , err := getSysctlForPinns (cfg .Sysctls )
92
+ if err != nil {
93
+ return nil , errors .Wrapf (err , "invalid sysctl" )
94
+ }
95
+ pinnsArgs = append (pinnsArgs , "-s" , pinnsSysctls )
92
96
}
93
97
94
98
var rootPair idtools.IDPair
@@ -171,14 +175,18 @@ func getMappingsForPinns(mappings []idtools.IDMap) string {
171
175
return g .String ()
172
176
}
173
177
174
- func getSysctlForPinns (sysctls map [string ]string ) string {
175
- // this assumes there's no sysctl with a `+` in it
178
+ func getSysctlForPinns (sysctls map [string ]string ) (string , error ) {
179
+ // This assumes there's no valid sysctl value with a `+` in it
180
+ // and as such errors if one is found.
176
181
const pinnsSysctlDelim = "+"
177
182
g := new (bytes.Buffer )
178
183
for key , value := range sysctls {
184
+ if strings .Contains (key , pinnsSysctlDelim ) || strings .Contains (value , pinnsSysctlDelim ) {
185
+ return "" , errors .Errorf ("'%s=%s' is invalid: %s found yet should not be present" , key , value , pinnsSysctlDelim )
186
+ }
179
187
fmt .Fprintf (g , "'%s=%s'%s" , key , value , pinnsSysctlDelim )
180
188
}
181
- return strings .TrimSuffix (g .String (), pinnsSysctlDelim )
189
+ return strings .TrimSuffix (g .String (), pinnsSysctlDelim ), nil
182
190
}
183
191
184
192
// NamespaceFromProcEntry creates a new namespace object from a bind mount from a processes proc entry.
0 commit comments