From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oren Laadan Subject: Re: [PATCH 1/2] Avoid memcpy overruns in fill|load_sigset() Date: Mon, 16 Nov 2009 13:43:21 -0500 Message-ID: <4B019D49.7040603@cs.columbia.edu> References: <41033d2ce4f31d016400bde1c5d393ae6f6b856a.1258153503.git.matthltc@us.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <41033d2ce4f31d016400bde1c5d393ae6f6b856a.1258153503.git.matthltc-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: containers-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org Errors-To: containers-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org To: Matt Helsley Cc: containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org List-Id: containers.vger.kernel.org struct ckpt_sigset is defined to match the size of sigset_t. Compilation should fail if it does not. Am I missing something ? Oren. Matt Helsley wrote: > Only copy the minimum size of the two structs. I believe gcc > will recognize that these are constants so the resulting code > should be the same size and just as fast. > > Signed-off-by: Matt Helsley > --- > checkpoint/signal.c | 4 ++-- > 1 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/checkpoint/signal.c b/checkpoint/signal.c > index 989b974..c65ee00 100644 > --- a/checkpoint/signal.c > +++ b/checkpoint/signal.c > @@ -22,12 +22,12 @@ > > static inline void fill_sigset(struct ckpt_sigset *h, sigset_t *sigset) > { > - memcpy(&h->sigset, sigset, sizeof(*sigset)); > + memcpy(&h->sigset, sigset, min(sizeof(*h), sizeof(*sigset))); > } > > static inline void load_sigset(sigset_t *sigset, struct ckpt_sigset *h) > { > - memcpy(sigset, &h->sigset, sizeof(*sigset)); > + memcpy(sigset, &h->sigset, min(sizeof(*h), sizeof(*sigset))); > } > > /***********************************************************************