2017-06-12 07:53:48

by Abdul Haleem

[permalink] [raw]
Subject: [next-20170609][bisected 4d72ba0] WARNING: CPU: 8 PID: 11043 at lib/vsprintf.c:1945 set_precision

Hi Rasmus,

With commit (4d72ba0-lib/vsprintf.c: warn about too large precisions..)

WARN_ONCE is being triggered while running trinity
$ git clone https://github.com/kernelslacker/trinity.git
$ cd trinity;./configure;make
$ ./trinity --dangerous

Machine : Power 8 PowerVM LPAR
gcc : version 5.2.1
config : attached


In file lib/vsprintf.c at line 1945:
set_precision(struct printf_spec *spec, int prec)
{
spec->precision = prec;
if (WARN_ONCE(spec->precision != prec, "precision %d too large",
prec)) {
spec->precision = clamp(prec, 0, PRECISION_MAX);
}
}


traces:
-------
synth uevent: /bus/platform/drivers/uart-sccnxp: unknown uevent action
string
synth uevent: /bus/platform/drivers/uart-sccnxp: unknown uevent action
string
precision 65529 too large
------------[ cut here ]------------
WARNING: CPU: 8 PID: 11043 at lib/vsprintf.c:1945 set_precision
+0xb0/0xc0
Modules linked in: dlci mpls_router af_key 8021q garp mrp nfc af_alg
caif_socket caif pn_pep phonet fcrypt pcbc rxrpc hidp hid cmtp
kernelcapi bnep rfcomm bluetooth ecdh_generic can_bcm can_raw can pptp
gre l2tp_ppp l2tp_netlink l2tp_core ip6_udp_tunnel udp_tunnel pppoe
pppox irda xfrm_user xfrm_algo nfnetlink scsi_transport_iscsi dn_rtmsg
llc2 dccp_ipv6 atm appletalk ipx p8023 p8022 psnap sctp dccp_ipv4 dccp
xt_addrtype xt_conntrack ipt_MASQUERADE nf_nat_masquerade_ipv4
iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 iptable_filter
ip_tables x_tables nf_nat nf_conntrack bridge stp llc dm_thin_pool
dm_persistent_data dm_bio_prison dm_bufio libcrc32c rtc_generic
vmx_crypto pseries_rng autofs4
CPU: 8 PID: 11043 Comm: trinity-c24 Not tainted 4.12.0-rc4-next-20170609
#2
task: c0000007706efd00 task.stack: c000000770774000
NIP: c0000000006353e0 LR: c0000000006353dc CTR: c0000000006391b0
REGS: c000000770777850 TRAP: 0700 Not tainted
(4.12.0-rc4-next-20170609)
MSR: 8000000002029033 <SF,VEC,EE,ME,IR,DR,RI,LE>
CR: 28004242 XER: 20000000
CFAR: c00000000028f33c SOFTE: 1
GPR00: c0000000006353dc c000000770777ad0 c000000001536e00
0000000000000019
GPR04: 0000000000000000 0000000000000000 000000006772616c
c000000001716e00
GPR08: 000000077eca0000 0000000000000000 0000000000000000
c00000076f202000
GPR12: 0000000000004400 c00000000e745400 0000000010031ca0
0000000010031c90
GPR16: 0000000000000000 0000000000000000 0000000010031cb0
0000000010031878
GPR20: 000000001097f714 0000000000002094 0000000000000003
c000000000e70f2e
GPR24: c000000770777cb8 0000000000000025 c000000770777c20
0000000000000020
GPR28: 0000000000000038 c000000770777c58 000000000000fff9
c000000770777b60
NIP [c0000000006353e0] set_precision+0xb0/0xc0
LR [c0000000006353dc] set_precision+0xac/0xc0
Call Trace:
[c000000770777ad0] [c0000000006353dc] set_precision+0xac/0xc0
(unreliable)
[c000000770777b40] [c000000000639044] vsnprintf+0x184/0x4a0
[c000000770777bc0] [c0000000001150c4] __request_module+0xb4/0x390
[c000000770777c80] [c0000000003a683c] get_fs_type+0xbc/0x170
[c000000770777cf0] [c0000000003acad4] do_mount+0x244/0xf20
[c000000770777dd0] [c0000000003adc28] SyS_mount+0xd8/0x180
[c000000770777e30] [c00000000000af84] system_call+0x38/0xe0
Instruction dump:
4e800020 60000000 60000000 60420000 39400000 4bffffd0 3c62ff96 39200001
3863e858 992a68c9 4bc59f15 60000000 <0fe00000> e93f0000 4bffff94
60420000
---[ end trace dcaaf98fb36d9e63 ]---


--
Regard's

Abdul Haleem
IBM Linux Technology Centre



Attachments:
Tul-vm-config (182.69 kB)

2017-06-12 08:12:57

by Joe Perches

[permalink] [raw]
Subject: Re: [next-20170609][bisected 4d72ba0] WARNING: CPU: 8 PID: 11043 at lib/vsprintf.c:1945 set_precision

On Mon, 2017-06-12 at 13:23 +0530, Abdul Haleem wrote:
> Hi Rasmus,
>
> With commit (4d72ba0-lib/vsprintf.c: warn about too large precisions..)
>
> WARN_ONCE is being triggered while running trinity
> $ git clone https://github.com/kernelslacker/trinity.git
> $ cd trinity;./configure;make
> $ ./trinity --dangerous
>
> Machine : Power 8 PowerVM LPAR
> gcc : version 5.2.1
> config : attached
>
>
> In file lib/vsprintf.c at line 1945:
> set_precision(struct printf_spec *spec, int prec)
> {
> spec->precision = prec;
> if (WARN_ONCE(spec->precision != prec, "precision %d too large",
> prec)) {
> spec->precision = clamp(prec, 0, PRECISION_MAX);
> }
> }

Presumably there should be a PATH_MAX maximum check added
to the strlen(name) in get_fs_type.

fs/filesystems.c:271

struct file_system_type *get_fs_type(const char *name)
{
struct file_system_type *fs;
const char *dot = strchr(name, '.');
int len = dot ? dot - name : strlen(name);

fs = __get_fs_type(name, len);
if (!fs && (request_module("fs-%.*s", len, name) == 0))
fs = __get_fs_type(name, len);