On Tue, May 05, 2015 at 10:14:18AM -0600, Eric Blake wrote: > On 05/05/2015 10:05 AM, Ján Tomko wrote: > > For some reason, we allow a bridge name with %d in it, which we replace > > with an unsigned integer to form a bridge name that does not yet exist > > on the host. > > > > Do not blindly pass it to virAsprintf if it's not the only conversion, > > to prevent crashing on input like: > > > > <network> > > <name>test</name> > > <forward mode='none'/> > > <bridge name='virbr%d%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s'/> > > </network> > > > > Ignore any template strings that do not have exactly one %d conversion, > > like we do in various drivers before calling virNetDevTapCreateInBridgePort. > > --- > > v2: drop the unnecessary changes in networkBridgeNameValidate > > > > src/network/bridge_driver.c | 8 +++++++- > > 1 file changed, 7 insertions(+), 1 deletion(-) > > > > diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c > > index 3b879cd..fe2448d 100644 > > --- a/src/network/bridge_driver.c > > +++ b/src/network/bridge_driver.c > > @@ -2775,7 +2775,13 @@ networkFindUnusedBridgeName(virNetworkObjListPtr nets, > > > > int ret = -1, id = 0; > > char *newname = NULL; > > - const char *templ = def->bridge ? def->bridge : "virbr%d"; > > + const char *templ = "virbr%d"; > > + const char *p; > > Unused variable. > > > + > > + if (def->bridge && > > + (p = strchr(def->bridge, '%')) == strrchr(def->bridge, '%') && > > + strstr(def->bridge, "%d")) > > Simpler as: > > if (def->bridge && > strstr(def->bridge, "%d") == strrchr(def->bridge, '%')) I still don't see it. [A] strchr(def->bridge, '%') [B] strrchr(def->bridge, '%') [C] strstr(def->bridge, "%d")) When def->bridge is '%s%s%s%d', [A] points to the first %s, [B] points to the %d and so does [C] This string would pass the simplified condition (B == C), but not the full one (A != C) Jan > > ACK with that simplification. > > -- > Eric Blake eblake redhat com +1-919-301-3266 > Libvirt virtualization library http://libvirt.org >
Attachment:
signature.asc
Description: Digital signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list