Commit b0b5f686 authored by Akihiro Suda's avatar Akihiro Suda

bump up rootlesskit

parent 9efbeb11
...@@ -237,7 +237,7 @@ import: ...@@ -237,7 +237,7 @@ import:
- package: github.com/robfig/cron - package: github.com/robfig/cron
version: v1-53-gdf38d32658d878 version: v1-53-gdf38d32658d878
- package: github.com/rootless-containers/rootlesskit - package: github.com/rootless-containers/rootlesskit
version: 893c1c3de71f54c301fdb85a7c0dd15c1933c159 version: v0.4.1
- package: github.com/russross/blackfriday - package: github.com/russross/blackfriday
version: v1.4-2-g300106c228d52c version: v1.4-2-g300106c228d52c
- package: github.com/seccomp/libseccomp-golang - package: github.com/seccomp/libseccomp-golang
......
...@@ -126,7 +126,7 @@ gopkg.in/yaml.v2 v2.2.1 ...@@ -126,7 +126,7 @@ gopkg.in/yaml.v2 v2.2.1
github.com/ibuildthecloud/kvsql d37dd2b0829b44a4964e48c9396e14b0536fefb6 https://github.com/erikwilson/rancher-kvsql.git github.com/ibuildthecloud/kvsql d37dd2b0829b44a4964e48c9396e14b0536fefb6 https://github.com/erikwilson/rancher-kvsql.git
# rootless # rootless
github.com/rootless-containers/rootlesskit 893c1c3de71f54c301fdb85a7c0dd15c1933c159 github.com/rootless-containers/rootlesskit v0.4.1
github.com/theckman/go-flock v0.7.1 github.com/theckman/go-flock v0.7.1
github.com/morikuni/aec 39771216ff4c63d11f5e604076f9c45e8be1067b github.com/morikuni/aec 39771216ff4c63d11f5e604076f9c45e8be1067b
......
...@@ -55,6 +55,19 @@ ...@@ -55,6 +55,19 @@
[[projects]] [[projects]]
branch = "master" branch = "master"
digest = "1:a1d58d11ad642c9760251e0846ee37ad1237e83f8245c8d310e3eba0d76bb7f4"
name = "github.com/insomniacslk/dhcp"
packages = [
"dhcpv4",
"dhcpv4/client4",
"iana",
"rfc1035label",
]
pruneopts = "UT"
revision = "625d653f51917b167cc2e53ef8fe595e85dd5fa4"
[[projects]]
branch = "master"
digest = "1:dd1e851f4e3a5ee3f51613c79a01666e04e5e9289e2da3f6f815c008010fc02f" digest = "1:dd1e851f4e3a5ee3f51613c79a01666e04e5e9289e2da3f6f815c008010fc02f"
name = "github.com/jamescun/tuntap" name = "github.com/jamescun/tuntap"
packages = ["."] packages = ["."]
...@@ -129,6 +142,18 @@ ...@@ -129,6 +142,18 @@
version = "v0.7.1" version = "v0.7.1"
[[projects]] [[projects]]
branch = "master"
digest = "1:35bdf197f9a11e01b3e2d9a35af57cd2b0ed0023d7c4d63a3e1bd7762275a17a"
name = "github.com/u-root/u-root"
packages = [
"pkg/rand",
"pkg/ubinary",
"pkg/uio",
]
pruneopts = "UT"
revision = "34b144e97033ea76860cc0fa6a69256cd5fe2133"
[[projects]]
digest = "1:b24d38b282bacf9791408a080f606370efa3d364e4b5fd9ba0f7b87786d3b679" digest = "1:b24d38b282bacf9791408a080f606370efa3d364e4b5fd9ba0f7b87786d3b679"
name = "github.com/urfave/cli" name = "github.com/urfave/cli"
packages = ["."] packages = ["."]
...@@ -138,9 +163,15 @@ ...@@ -138,9 +163,15 @@
[[projects]] [[projects]]
branch = "master" branch = "master"
digest = "1:7ccb2dbb79f60b4e530c7dc3a0b3681b3869cf7ea91c645735e4dd4e6e3264fd" digest = "1:19df0dab53c3fdea922472b4199990146f3db473881fdc59317d8b4800df145a"
name = "golang.org/x/net" name = "golang.org/x/net"
packages = ["context/ctxhttp"] packages = [
"bpf",
"context/ctxhttp",
"internal/iana",
"internal/socket",
"ipv4",
]
pruneopts = "UT" pruneopts = "UT"
revision = "74de082e2cca95839e88aa0aeee5aadf6ce7710f" revision = "74de082e2cca95839e88aa0aeee5aadf6ce7710f"
...@@ -162,6 +193,8 @@ ...@@ -162,6 +193,8 @@
"github.com/docker/docker/pkg/idtools", "github.com/docker/docker/pkg/idtools",
"github.com/google/uuid", "github.com/google/uuid",
"github.com/gorilla/mux", "github.com/gorilla/mux",
"github.com/insomniacslk/dhcp/dhcpv4",
"github.com/insomniacslk/dhcp/dhcpv4/client4",
"github.com/jamescun/tuntap", "github.com/jamescun/tuntap",
"github.com/moby/vpnkit/go/pkg/vmnet", "github.com/moby/vpnkit/go/pkg/vmnet",
"github.com/pkg/errors", "github.com/pkg/errors",
......
...@@ -39,3 +39,7 @@ ...@@ -39,3 +39,7 @@
[prune] [prune]
go-tests = true go-tests = true
unused-packages = true unused-packages = true
[[constraint]]
branch = "master"
name = "github.com/insomniacslk/dhcp"
...@@ -4,11 +4,13 @@ import ( ...@@ -4,11 +4,13 @@ import (
"io/ioutil" "io/ioutil"
"os" "os"
"os/exec" "os/exec"
"runtime"
"strconv" "strconv"
"syscall" "syscall"
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
"golang.org/x/sys/unix"
"github.com/rootless-containers/rootlesskit/pkg/common" "github.com/rootless-containers/rootlesskit/pkg/common"
"github.com/rootless-containers/rootlesskit/pkg/copyup" "github.com/rootless-containers/rootlesskit/pkg/copyup"
...@@ -76,12 +78,12 @@ func activateLoopback() error { ...@@ -76,12 +78,12 @@ func activateLoopback() error {
return nil return nil
} }
func activateTap(tap, ip string, netmask int, gateway string, mtu int) error { func activateDev(dev, ip string, netmask int, gateway string, mtu int) error {
cmds := [][]string{ cmds := [][]string{
{"ip", "link", "set", tap, "up"}, {"ip", "link", "set", dev, "up"},
{"ip", "link", "set", "dev", tap, "mtu", strconv.Itoa(mtu)}, {"ip", "link", "set", "dev", dev, "mtu", strconv.Itoa(mtu)},
{"ip", "addr", "add", ip + "/" + strconv.Itoa(netmask), "dev", tap}, {"ip", "addr", "add", ip + "/" + strconv.Itoa(netmask), "dev", dev},
{"ip", "route", "add", "default", "via", gateway, "dev", tap}, {"ip", "route", "add", "default", "via", gateway, "dev", dev},
} }
if err := common.Execs(os.Stderr, os.Environ(), cmds); err != nil { if err := common.Execs(os.Stderr, os.Environ(), cmds); err != nil {
return errors.Wrapf(err, "executing %v", cmds) return errors.Wrapf(err, "executing %v", cmds)
...@@ -119,11 +121,11 @@ func setupNet(msg common.Message, etcWasCopied bool, driver network.ChildDriver) ...@@ -119,11 +121,11 @@ func setupNet(msg common.Message, etcWasCopied bool, driver network.ChildDriver)
if err := activateLoopback(); err != nil { if err := activateLoopback(); err != nil {
return err return err
} }
tap, err := driver.ConfigureTap(msg.Network) dev, err := driver.ConfigureNetworkChild(&msg.Network)
if err != nil { if err != nil {
return err return err
} }
if err := activateTap(tap, msg.Network.IP, msg.Network.Netmask, msg.Network.Gateway, msg.Network.MTU); err != nil { if err := activateDev(dev, msg.Network.IP, msg.Network.Netmask, msg.Network.Gateway, msg.Network.MTU); err != nil {
return err return err
} }
if etcWasCopied { if etcWasCopied {
...@@ -187,6 +189,14 @@ func Child(opt Opt) error { ...@@ -187,6 +189,14 @@ func Child(opt Opt) error {
if msg.Stage != 1 { if msg.Stage != 1 {
return errors.Errorf("expected stage 1, got stage %d", msg.Stage) return errors.Errorf("expected stage 1, got stage %d", msg.Stage)
} }
// The parent calls child with Pdeathsig, but it is cleared when newuidmap SUID binary is called
// https://github.com/rootless-containers/rootlesskit/issues/65#issuecomment-492343646
runtime.LockOSThread()
err = unix.Prctl(unix.PR_SET_PDEATHSIG, uintptr(unix.SIGKILL), 0, 0, 0)
runtime.UnlockOSThread()
if err != nil {
return err
}
os.Unsetenv(opt.PipeFDEnvKey) os.Unsetenv(opt.PipeFDEnvKey)
if err := pipeR.Close(); err != nil { if err := pipeR.Close(); err != nil {
return errors.Wrapf(err, "failed to close fd %d", pipeFD) return errors.Wrapf(err, "failed to close fd %d", pipeFD)
......
...@@ -22,6 +22,7 @@ type Message1 struct { ...@@ -22,6 +22,7 @@ type Message1 struct {
// NetworkMessage is empty for HostNetwork. // NetworkMessage is empty for HostNetwork.
type NetworkMessage struct { type NetworkMessage struct {
Dev string
IP string IP string
Netmask int Netmask int
Gateway string Gateway string
......
...@@ -14,5 +14,7 @@ type ParentDriver interface { ...@@ -14,5 +14,7 @@ type ParentDriver interface {
// ChildDriver is called from the child namespace // ChildDriver is called from the child namespace
type ChildDriver interface { type ChildDriver interface {
ConfigureTap(netmsg common.NetworkMessage) (tap string, err error) // netmsg MAY be modified.
// devName is like "tap" or "eth0"
ConfigureNetworkChild(netmsg *common.NetworkMessage) (devName string, err error)
} }
...@@ -41,8 +41,6 @@ func NewParentDriver(binary string, mtu int, ipnet *net.IPNet, disableHostLoopba ...@@ -41,8 +41,6 @@ func NewParentDriver(binary string, mtu int, ipnet *net.IPNet, disableHostLoopba
} }
} }
const opaqueTap = "slirp4netns.tap"
type parentDriver struct { type parentDriver struct {
binary string binary string
mtu int mtu int
...@@ -87,10 +85,8 @@ func (d *parentDriver) ConfigureNetwork(childPID int, stateDir string) (*common. ...@@ -87,10 +85,8 @@ func (d *parentDriver) ConfigureNetwork(childPID int, stateDir string) (*common.
return nil, common.Seq(cleanups), errors.Wrapf(err, "executing %v", cmd) return nil, common.Seq(cleanups), errors.Wrapf(err, "executing %v", cmd)
} }
netmsg := common.NetworkMessage{ netmsg := common.NetworkMessage{
Dev: tap,
MTU: d.mtu, MTU: d.mtu,
Opaque: map[string]string{
opaqueTap: tap,
},
} }
if d.ipnet != nil { if d.ipnet != nil {
// TODO: get the actual configuration via slirp4netns API? // TODO: get the actual configuration via slirp4netns API?
...@@ -126,8 +122,8 @@ func NewChildDriver() network.ChildDriver { ...@@ -126,8 +122,8 @@ func NewChildDriver() network.ChildDriver {
type childDriver struct { type childDriver struct {
} }
func (d *childDriver) ConfigureTap(netmsg common.NetworkMessage) (string, error) { func (d *childDriver) ConfigureNetworkChild(netmsg *common.NetworkMessage) (string, error) {
tap := netmsg.Opaque[opaqueTap] tap := netmsg.Dev
if tap == "" { if tap == "" {
return "", errors.New("could not determine the preconfigured tap") return "", errors.New("could not determine the preconfigured tap")
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment