rocker: forbid to change world type
authorJiri Pirko <jiri@mellanox.com>
Thu, 25 Feb 2016 14:31:55 +0000 (15:31 +0100)
committerJason Wang <jasowang@redhat.com>
Tue, 8 Mar 2016 07:34:18 +0000 (15:34 +0800)
Port to world assignment should be permitted only by qemu user. Driver
should not be able to do it, so forbid that possibility.

Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
hw/net/rocker/rocker.c
hw/net/rocker/rocker_fp.c
hw/net/rocker/rocker_fp.h

index f3e994d5631215f663f166f224f4f908e6d61b79..a1d921dc1cb7bda4588ff1c222de67b149679780 100644 (file)
@@ -400,7 +400,13 @@ static int cmd_set_port_settings(Rocker *r,
 
     if (tlvs[ROCKER_TLV_CMD_PORT_SETTINGS_MODE]) {
         mode = rocker_tlv_get_u8(tlvs[ROCKER_TLV_CMD_PORT_SETTINGS_MODE]);
-        fp_port_set_world(fp_port, r->worlds[mode]);
+        if (mode >= ROCKER_WORLD_TYPE_MAX) {
+            return -ROCKER_EINVAL;
+        }
+        /* We don't support world change. */
+        if (!fp_port_check_world(fp_port, r->worlds[mode])) {
+            return -ROCKER_EINVAL;
+        }
     }
 
     if (tlvs[ROCKER_TLV_CMD_PORT_SETTINGS_LEARNING]) {
index af37fefc0ae6ee58f6d9fb0ee89f2db0b07cbca1..0149899c62d9459603e8b2cc0a048b8948d62d74 100644 (file)
@@ -186,6 +186,11 @@ void fp_port_set_world(FpPort *port, World *world)
     port->world = world;
 }
 
+bool fp_port_check_world(FpPort *port, World *world)
+{
+    return port->world == world;
+}
+
 bool fp_port_enabled(FpPort *port)
 {
     return port->enabled;
index ab80fd833cdaa955f6cc5b3eb19bf752c17452cb..04592bbfd2260eda62d2bee954f91eb2f414ccc2 100644 (file)
@@ -40,6 +40,7 @@ int fp_port_set_settings(FpPort *port, uint32_t speed,
 bool fp_port_from_pport(uint32_t pport, uint32_t *port);
 World *fp_port_get_world(FpPort *port);
 void fp_port_set_world(FpPort *port, World *world);
+bool fp_port_check_world(FpPort *port, World *world);
 bool fp_port_enabled(FpPort *port);
 void fp_port_enable(FpPort *port);
 void fp_port_disable(FpPort *port);