• Sebastian Sanchez's avatar
    IB/hfi1: Validate PKEY for incoming GSI MAD packets · 406310c6
    Sebastian Sanchez authored
    These are the use-cases where the pkey needs to be tested to see
    if a packet needs to be dropped.
    
    a) Check if pkey is not FULL_MGMT_P_KEY or LIM_MGMT_P_KEY,
       drop the packet as it's not part of the management partition.
       Self-originated packets are an exception.
    
    b) If pkey index points to FULL_MGMT_P_KEY and LIM_MGMT_P_KEY is
       in the table, the packet is coming from a management node,
       and the receiving node is also a management node, so it is safe
       for the packet to go through.
    
    c) If pkey index points to FULL_MGMT_P_KEY and LIM_MGMT_P_KEY is
       NOT in the table, drop the packet as LIM_MGMT_P_KEY should
       always be in the pkey table. It could be a misconfiguration.
    
    d) If pkey index points to LIM_MGMT_P_KEY and FULL_MGMT_P_KEY is
       NOT in the table, it is safe for the packet to go through
       since a non-management node is talking to another non-managment
       node.
    
    e) If pkey index points to LIM_MGMT_P_KEY and FULL_MGMT_P_KEY is in
       the table, drop the packet because a non-management node is
       talking to a management node, and it could be an attack.
    
    For the implementation, these rules can be simplied to only checking
    for (a) and (e). There's no need to check for rule (b) as
    the packet doesn't need to be dropped. Rule (c) is not possible in
    the driver as LIM_MGMT_P_KEY is always in the pkey table.
    Reviewed-by: default avatarMichael J. Ruhl <michael.j.ruhl@intel.com>
    Signed-off-by: default avatarSebastian Sanchez <sebastian.sanchez@intel.com>
    Signed-off-by: default avatarDennis Dalessandro <dennis.dalessandro@intel.com>
    Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
    406310c6
mad.c 137 KB