From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56379) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aYwxW-0001ED-P7 for qemu-devel@nongnu.org; Thu, 25 Feb 2016 09:32:03 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aYwxV-00082e-T3 for qemu-devel@nongnu.org; Thu, 25 Feb 2016 09:32:02 -0500 Received: from mail-wm0-x243.google.com ([2a00:1450:400c:c09::243]:33514) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aYwxV-00082C-MK for qemu-devel@nongnu.org; Thu, 25 Feb 2016 09:32:01 -0500 Received: by mail-wm0-x243.google.com with SMTP id c200so3809693wme.0 for ; Thu, 25 Feb 2016 06:32:01 -0800 (PST) From: Jiri Pirko Date: Thu, 25 Feb 2016 15:31:55 +0100 Message-Id: <1456410718-24506-2-git-send-email-jiri@resnulli.us> In-Reply-To: <1456410718-24506-1-git-send-email-jiri@resnulli.us> References: <1456410718-24506-1-git-send-email-jiri@resnulli.us> Subject: [Qemu-devel] [patch qemu v2 1/4] rocker: forbid to change world type List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: prem@barefootnetworks.com, daniel@iogearbox.net, stefanha@gmail.com, jasowang@redhat.com, parag.bhide@barefootnetworks.com, idosch@mellanox.com, sfeldma@gmail.com, eladr@mellanox.com, pbonzini@redhat.com, alexei.starovoitov@gmail.com From: Jiri Pirko 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 --- hw/net/rocker/rocker.c | 8 +++++++- hw/net/rocker/rocker_fp.c | 5 +++++ hw/net/rocker/rocker_fp.h | 1 + 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/hw/net/rocker/rocker.c b/hw/net/rocker/rocker.c index f3e994d..a1d921d 100644 --- a/hw/net/rocker/rocker.c +++ b/hw/net/rocker/rocker.c @@ -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]) { diff --git a/hw/net/rocker/rocker_fp.c b/hw/net/rocker/rocker_fp.c index af37fef..0149899 100644 --- a/hw/net/rocker/rocker_fp.c +++ b/hw/net/rocker/rocker_fp.c @@ -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; diff --git a/hw/net/rocker/rocker_fp.h b/hw/net/rocker/rocker_fp.h index ab80fd8..04592bb 100644 --- a/hw/net/rocker/rocker_fp.h +++ b/hw/net/rocker/rocker_fp.h @@ -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); -- 2.4.3