2
0
mirror of https://github.com/openvswitch/ovs synced 2025-08-31 06:15:47 +00:00

dpif-linux: Don't allow arbitrary internal ports to identify a datapath.

The userspace tools were allowing the name of any internal port to be used
to identify a datapath.  This, however, makes it hard to enumerate all the
names by which a datapath can be known, and it was never documented or
intentional behavior, so this commit disables it.
This commit is contained in:
Ben Pfaff
2009-07-06 11:02:57 -07:00
parent 632d136c7b
commit a165b67e53
2 changed files with 13 additions and 6 deletions

View File

@@ -453,9 +453,10 @@ do_ioctl(const struct dpif *dpif_, int cmd, const void *arg)
}
static int
lookup_minor(const char *name, int *minor)
lookup_minor(const char *name, int *minorp)
{
struct ethtool_drvinfo drvinfo;
int minor, port_no;
struct ifreq ifr;
int error;
int sock;
@@ -485,14 +486,20 @@ lookup_minor(const char *name, int *minor)
goto error_close_sock;
}
if (!isdigit(drvinfo.bus_info[0])) {
VLOG_WARN("%s ethtool info does not contain an openvswitch minor",
name);
if (sscanf(drvinfo.bus_info, "%d.%d", &minor, &port_no) != 2) {
VLOG_WARN("%s ethtool bus_info has unexpected format", name);
error = EPROTOTYPE;
goto error_close_sock;
} else if (port_no != ODPP_LOCAL) {
/* This is an Open vSwitch device but not the local port. We
* intentionally support only using the name of the local port as the
* name of a datapath; otherwise, it would be too difficult to
* enumerate all the names of a datapath. */
error = EOPNOTSUPP;
goto error_close_sock;
}
*minor = atoi(drvinfo.bus_info);
*minorp = minor;
close(sock);
return 0;