/* Deliver to the uncontrolled port by default */
        enum rx_handler_result ret = RX_HANDLER_PASS;
        struct ethhdr *hdr = eth_hdr(skb);
+       struct metadata_dst *md_dst;
        struct macsec_rxh_data *rxd;
        struct macsec_dev *macsec;
 
        rcu_read_lock();
        rxd = macsec_data_rcu(skb->dev);
+       md_dst = skb_metadata_dst(skb);
 
        list_for_each_entry_rcu(macsec, &rxd->secys, secys) {
                struct sk_buff *nskb;
                 * the SecTAG, so we have to deduce which port to deliver to.
                 */
                if (macsec_is_offloaded(macsec) && netif_running(ndev)) {
+                       if (md_dst && md_dst->type == METADATA_MACSEC &&
+                           (!find_rx_sc(&macsec->secy, md_dst->u.macsec_info.sci)))
+                               continue;
+
                        if (ether_addr_equal_64bits(hdr->h_dest,
                                                    ndev->dev_addr)) {
                                /* exact match, divert skb to this port */