vswitchd: Fix dependency on DP_MAX_PORTS for allocating "struct dst"s.
authorBen Pfaff <blp@nicira.com>
Mon, 13 Dec 2010 22:28:53 +0000 (14:28 -0800)
committerBen Pfaff <blp@nicira.com>
Mon, 13 Dec 2010 22:28:53 +0000 (14:28 -0800)
commit0c62a7ad88bb1f2eacfa225b9812dc10ba7b6eb2
tree4b099e66e5943407dc703f5eb9d15b4b6e2ce7cc
parentc47cd5f01377c54251fbf093f8fb390f631a8264
vswitchd: Fix dependency on DP_MAX_PORTS for allocating "struct dst"s.

Until now, compose_actions() has allocated enough "struct dst"s on the
stack for a worst-case flow, one that floods packets with the maximum
number of ports and mirrors.  When the code was written this was correct.
However, now the number of ports is no longer known at compile time.  The
maximum number, 65535, would require (65536 * (32 + 1) * 4) == 8 MB of
stack space, which is a lot.  So this commit fixes the problem a different
way, by allocating the "struct dst"s dynamically when necessary.

This is a bug fix, but not a very serious one, because it could only
become a buffer overflow with a large number of mirrors.
vswitchd/bridge.c