On 05.10.2020 10:03, Paul Durrant wrote: >> From: Andrew Cooper <andrew.coop...@citrix.com> >> Sent: 02 October 2020 22:20 >> >> On 24/09/2020 14:10, Paul Durrant wrote: >>> +int domain_save_end(struct domain_context *c) >>> +{ >>> + struct domain *d = c->domain; >>> + size_t len = ROUNDUP(c->len, DOMAIN_SAVE_ALIGN) - c->len; /* padding */ >> >> DOMAIN_SAVE_ALIGN - (c->len & (DOMAIN_SAVE_ALIGN - 1)) >> >> isn't vulnerable to overflow. >> > > ...and significantly uglier code. What's actually wrong with what I wrote?
I don't think there's anything "wrong" or "vulnerable" here, but I still can see Andrew's point. The "vulnerable" aspect applies only in the (highly hypothetical I think) cases of either sizeof(size_t) < sizeof(int) or size_t being a signed type, afaict. But since it's easy (and imo not "significantly uglier") to write code that is free of any wrapping or overflowing behavior, I think it is sensible to actually write it that way. Jan