projects
/
platform
/
kernel
/
linux-stable.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
61c5d6b
)
libceph: fix invalid unsigned->signed conversion for timespec encoding
author
Josh Durgin
<josh.durgin@inktank.com>
Fri, 28 Jun 2013 20:13:16 +0000
(13:13 -0700)
committer
Sage Weil
<sage@inktank.com>
Tue, 9 Jul 2013 19:18:06 +0000
(12:18 -0700)
__kernel_time_t is a long, which cannot hold a U32_MAX on 32-bit
architectures. Just drop this check as it has limited value.
This fixes a crash like:
[ 957.905812] kernel BUG at /srv/autobuild-ceph/gitbuilder.git/build/include/linux/ceph/decode.h:164!
[ 957.914849] Internal error: Oops - BUG: 0 [#1] SMP ARM
[ 957.919978] Modules linked in: rbd libceph libcrc32c ipmi_devintf ipmi_si ipmi_msghandler nfsd nfs_acl auth_rpcgss nfs fscache lockd sunrpc
[ 957.932547] CPU: 1 Tainted: G W (3.9.0-ceph-
19bb6a83
-highbank #1)
[ 957.939881] PC is at ceph_osdc_build_request+0x8c/0x4f8 [libceph]
[ 957.945967] LR is at 0xec520904
[ 957.949103] pc : [<
bf13e76c
>] lr : [<
ec520904
>] psr:
20000153
[ 957.949103] sp :
ec753df8
ip :
00000001
fp :
ec53e100
[ 957.960571] r10:
ebef25c0
r9 :
ec5fa400
r8 :
ecbcc000
[ 957.965788] r7 :
00000000
r6 :
00000000
r5 :
ffffffff
r4 :
00000020
[ 957.972307] r3 :
51cc8143
r2 :
ec520900
r1 :
ec753e58
r0 :
ec520908
[ 957.978827] Flags: nzCv IRQs on FIQs off Mode SVC_32 ISA ARM Segment user
[ 957.986039] Control:
10c5387d
Table:
2c59c04a
DAC:
00000015
[ 957.991777] Process rbd (pid: 2138, stack limit = 0xec752238)
[ 957.997514] Stack: (0xec753df8 to 0xec754000)
[ 958.001864] 3de0:
00000001
00000001
[ 958.010032] 3e00:
00000001
bf139744
ecbcc000
ec55a0a0
00000024
00000000
ebef25c0
fffffffe
[ 958.018204] 3e20:
ffffffff
00000000
00000000
00000001
ec5fa400
ebef25c0
ec53e100
bf166b68
[ 958.026377] 3e40:
00000000
0000220f
fffffffe
ffffffff
ec753e58
bf13ff24
51cc8143
05b25ed2
[ 958.034548] 3e60:
00000001
00000000
00000000
bf1688d4
00000001
00000000
00000000
00000000
[ 958.042720] 3e80:
00000001
00000060
ec5fa400
ed53d200
ed439600
ed439300
00000001
00000060
[ 958.050888] 3ea0:
ec5fa400
ed53d200
00000000
bf16a320
00000000
ec53e100
00000040
ec753eb8
[ 958.059059] 3ec0:
ec51df00
ed53d7c0
ed53d200
ed53d7c0
00000000
ed53d7c0
ec5fa400
bf16ed70
[ 958.067230] 3ee0:
00000000
00000060
00000002
ed53d200
00000000
bf16acf4
ed53d7c0
ec752000
[ 958.075402] 3f00:
ed980e50
e954f5d8
00000000
00000060
ed53d240
ed53d258
ec753f80
c04f44a8
[ 958.083574] 3f20:
edb7910c
ec664700
01ade920
c02e4c44
00000060
c016b3dc
ec51de40
01adfb84
[ 958.091745] 3f40:
00000060
ec752000
ec753f80
ec752000
00000060
c0108444
00000007
ec51de48
[ 958.099914] 3f60:
ed0eb8c0
00000000
00000000
ec51de40
01adfb84
00000001
00000060
c0108858
[ 958.108085] 3f80:
00000000
00000000
51cc8143
00000060
01adfb84
00000007
00000004
c000dd68
[ 958.116257] 3fa0:
00000000
c000dbc0
00000060
01adfb84
00000007
01adfb84
00000060
01adfb80
[ 958.124429] 3fc0:
00000060
01adfb84
00000007
00000004
beded1a8
00000000
01adf2f0
01ade920
[ 958.132599] 3fe0:
00000000
beded180
b6811324
b6811334
800f0010
00000007
2e7f5821
2e7f5c21
[ 958.140815] [<
bf13e76c
>] (ceph_osdc_build_request+0x8c/0x4f8 [libceph]) from [<
bf166b68
>] (rbd_osd_req_format_write+0x50/0x7c [rbd])
[ 958.152739] [<
bf166b68
>] (rbd_osd_req_format_write+0x50/0x7c [rbd]) from [<
bf1688d4
>] (rbd_dev_header_watch_sync+0xe0/0x204 [rbd])
[ 958.164486] [<
bf1688d4
>] (rbd_dev_header_watch_sync+0xe0/0x204 [rbd]) from [<
bf16a320
>] (rbd_dev_image_probe+0x23c/0x850 [rbd])
[ 958.175967] [<
bf16a320
>] (rbd_dev_image_probe+0x23c/0x850 [rbd]) from [<
bf16acf4
>] (rbd_add+0x3c0/0x918 [rbd])
[ 958.185975] [<
bf16acf4
>] (rbd_add+0x3c0/0x918 [rbd]) from [<
c02e4c44
>] (bus_attr_store+0x20/0x2c)
[ 958.194850] [<
c02e4c44
>] (bus_attr_store+0x20/0x2c) from [<
c016b3dc
>] (sysfs_write_file+0x168/0x198)
[ 958.203984] [<
c016b3dc
>] (sysfs_write_file+0x168/0x198) from [<
c0108444
>] (vfs_write+0x9c/0x170)
[ 958.212768] [<
c0108444
>] (vfs_write+0x9c/0x170) from [<
c0108858
>] (sys_write+0x3c/0x70)
[ 958.220768] [<
c0108858
>] (sys_write+0x3c/0x70) from [<
c000dbc0
>] (ret_fast_syscall+0x0/0x30)
[ 958.229199] Code:
e59d1058
e5913000
e3530000
ba000114
(
e7f001f2
)
CC: stable@vger.kernel.org # 3.4+
Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
Reviewed-by: Sage Weil <sage@inktank.com>
include/linux/ceph/decode.h
patch
|
blob
|
history
diff --git
a/include/linux/ceph/decode.h
b/include/linux/ceph/decode.h
index 379f71508995f1bd65a740c2c558792ca9061ff0..0442c3d800f0f9c8a9268a93715cfe2bc18c639b 100644
(file)
--- a/
include/linux/ceph/decode.h
+++ b/
include/linux/ceph/decode.h
@@
-160,11
+160,6
@@
static inline void ceph_decode_timespec(struct timespec *ts,
static inline void ceph_encode_timespec(struct ceph_timespec *tv,
const struct timespec *ts)
{
- BUG_ON(ts->tv_sec < 0);
- BUG_ON(ts->tv_sec > (__kernel_time_t)U32_MAX);
- BUG_ON(ts->tv_nsec < 0);
- BUG_ON(ts->tv_nsec > (long)U32_MAX);
-
tv->tv_sec = cpu_to_le32((u32)ts->tv_sec);
tv->tv_nsec = cpu_to_le32((u32)ts->tv_nsec);
}