pkg/api: do not leak config pointers into specgen

The value of the pointer might be changed while creating the container
causing unexpected side effects.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
This commit is contained in:
Paul Holzinger
2024-07-29 15:12:55 +02:00
parent 3b51764d19
commit 1b91df012d
2 changed files with 19 additions and 2 deletions

View File

@ -27,14 +27,18 @@ func CreateContainer(w http.ResponseWriter, r *http.Request) {
return return
} }
// copy vars here and not leak config pointers into specgen
noHosts := conf.Containers.NoHosts
privileged := conf.Containers.Privileged
// we have to set the default before we decode to make sure the correct default is set when the field is unset // we have to set the default before we decode to make sure the correct default is set when the field is unset
sg := specgen.SpecGenerator{ sg := specgen.SpecGenerator{
ContainerNetworkConfig: specgen.ContainerNetworkConfig{ ContainerNetworkConfig: specgen.ContainerNetworkConfig{
UseImageHosts: &conf.Containers.NoHosts, UseImageHosts: &noHosts,
}, },
ContainerSecurityConfig: specgen.ContainerSecurityConfig{ ContainerSecurityConfig: specgen.ContainerSecurityConfig{
Umask: conf.Containers.Umask, Umask: conf.Containers.Umask,
Privileged: &conf.Containers.Privileged, Privileged: &privileged,
}, },
} }

View File

@ -86,4 +86,17 @@ podman run $IMAGE true
t POST libpod/containers/prune 200 t POST libpod/containers/prune 200
t GET libpod/containers/json 200 \ t GET libpod/containers/json 200 \
length=0 length=0
# check the config options are not overwritten by acceident
t POST libpod/containers/create name=test1 image=$IMAGE privileged=true 201
t GET libpod/containers/test1/json 200 \
.HostConfig.Annotations.'"io.podman.annotations.privileged"'="TRUE"
# now the same without privileged it should not inhert the privileged from before
t POST libpod/containers/create name=test2 image=$IMAGE 201
t GET libpod/containers/test2/json 200 \
.HostConfig.Annotations=null
podman rm test1 test2
# vim: filetype=sh # vim: filetype=sh