diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/lcm.c | 11 | ||||
-rw-r--r-- | lib/lockref.c | 2 | ||||
-rw-r--r-- | lib/nlattr.c | 2 |
3 files changed, 14 insertions, 1 deletions
@@ -12,3 +12,14 @@ unsigned long lcm(unsigned long a, unsigned long b) | |||
12 | return 0; | 12 | return 0; |
13 | } | 13 | } |
14 | EXPORT_SYMBOL_GPL(lcm); | 14 | EXPORT_SYMBOL_GPL(lcm); |
15 | |||
16 | unsigned long lcm_not_zero(unsigned long a, unsigned long b) | ||
17 | { | ||
18 | unsigned long l = lcm(a, b); | ||
19 | |||
20 | if (l) | ||
21 | return l; | ||
22 | |||
23 | return (b ? : a); | ||
24 | } | ||
25 | EXPORT_SYMBOL_GPL(lcm_not_zero); | ||
diff --git a/lib/lockref.c b/lib/lockref.c index ecb9a665ec19..494994bf17c8 100644 --- a/lib/lockref.c +++ b/lib/lockref.c | |||
@@ -18,7 +18,7 @@ | |||
18 | #define CMPXCHG_LOOP(CODE, SUCCESS) do { \ | 18 | #define CMPXCHG_LOOP(CODE, SUCCESS) do { \ |
19 | struct lockref old; \ | 19 | struct lockref old; \ |
20 | BUILD_BUG_ON(sizeof(old) != 8); \ | 20 | BUILD_BUG_ON(sizeof(old) != 8); \ |
21 | old.lock_count = ACCESS_ONCE(lockref->lock_count); \ | 21 | old.lock_count = READ_ONCE(lockref->lock_count); \ |
22 | while (likely(arch_spin_value_unlocked(old.lock.rlock.raw_lock))) { \ | 22 | while (likely(arch_spin_value_unlocked(old.lock.rlock.raw_lock))) { \ |
23 | struct lockref new = old, prev = old; \ | 23 | struct lockref new = old, prev = old; \ |
24 | CODE \ | 24 | CODE \ |
diff --git a/lib/nlattr.c b/lib/nlattr.c index 76a1b59523ab..f5907d23272d 100644 --- a/lib/nlattr.c +++ b/lib/nlattr.c | |||
@@ -279,6 +279,8 @@ int nla_memcpy(void *dest, const struct nlattr *src, int count) | |||
279 | int minlen = min_t(int, count, nla_len(src)); | 279 | int minlen = min_t(int, count, nla_len(src)); |
280 | 280 | ||
281 | memcpy(dest, nla_data(src), minlen); | 281 | memcpy(dest, nla_data(src), minlen); |
282 | if (count > minlen) | ||
283 | memset(dest + minlen, 0, count - minlen); | ||
282 | 284 | ||
283 | return minlen; | 285 | return minlen; |
284 | } | 286 | } |