bridge: skip fdb add if the port shouldn't learn
[pandora-kernel.git] / net / bridge / br_fdb.c
index e0670d7..7896cf1 100644 (file)
@@ -736,6 +736,12 @@ static int fdb_add_entry(struct net_bridge_port *source, const __u8 *addr,
        struct net_bridge_fdb_entry *fdb;
        bool modified = false;
 
+       /* If the port cannot learn allow only local and static entries */
+       if (!(state & NUD_PERMANENT) && !(state & NUD_NOARP) &&
+           !(source->state == BR_STATE_LEARNING ||
+             source->state == BR_STATE_FORWARDING))
+               return -EPERM;
+
        fdb = fdb_find(head, addr, vid);
        if (fdb == NULL) {
                if (!(flags & NLM_F_CREATE))