[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] spinlock: ensure the flags parameter is wide enough
commit 170fa9967176c8627fe2e75dbe1dc5212019afde Author: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> AuthorDate: Tue Oct 22 17:16:29 2013 +0200 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Tue Oct 22 17:16:29 2013 +0200 spinlock: ensure the flags parameter is wide enough Because of the construction of spin_lock_irq() (and varients), the flags parameter could be trucated. Use a BUILD_BUG_ON() to verify the width of the parameter. Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Acked-by: Keir Fraser <keir@xxxxxxx> Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx> --- xen/include/xen/spinlock.h | 18 +++++++++++++++--- 1 files changed, 15 insertions(+), 3 deletions(-) diff --git a/xen/include/xen/spinlock.h b/xen/include/xen/spinlock.h index 76581c5..12b0a89 100644 --- a/xen/include/xen/spinlock.h +++ b/xen/include/xen/spinlock.h @@ -188,7 +188,11 @@ int _rw_is_write_locked(rwlock_t *lock); #define spin_lock(l) _spin_lock(l) #define spin_lock_irq(l) _spin_lock_irq(l) -#define spin_lock_irqsave(l, f) ((f) = _spin_lock_irqsave(l)) +#define spin_lock_irqsave(l, f) \ + ({ \ + BUILD_BUG_ON(sizeof(f) != sizeof(unsigned long)); \ + ((f) = _spin_lock_irqsave(l)); \ + }) #define spin_unlock(l) _spin_unlock(l) #define spin_unlock_irq(l) _spin_unlock_irq(l) @@ -220,7 +224,11 @@ int _rw_is_write_locked(rwlock_t *lock); #define read_lock(l) _read_lock(l) #define read_lock_irq(l) _read_lock_irq(l) -#define read_lock_irqsave(l, f) ((f) = _read_lock_irqsave(l)) +#define read_lock_irqsave(l, f) \ + ({ \ + BUILD_BUG_ON(sizeof(f) != sizeof(unsigned long)); \ + ((f) = _read_lock_irqsave(l)); \ + }) #define read_unlock(l) _read_unlock(l) #define read_unlock_irq(l) _read_unlock_irq(l) @@ -229,7 +237,11 @@ int _rw_is_write_locked(rwlock_t *lock); #define write_lock(l) _write_lock(l) #define write_lock_irq(l) _write_lock_irq(l) -#define write_lock_irqsave(l, f) ((f) = _write_lock_irqsave(l)) +#define write_lock_irqsave(l, f) \ + ({ \ + BUILD_BUG_ON(sizeof(f) != sizeof(unsigned long)); \ + ((f) = _write_lock_irqsave(l)); \ + }) #define write_trylock(l) _write_trylock(l) #define write_unlock(l) _write_unlock(l) -- generated by git-patchbot for /home/xen/git/xen.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |