2018-08-19 22:16:39

by Stephen Rothwell

[permalink] [raw]
Subject: linux-next: build warnings from Linus' tree

Hi Linus,

Today's linux-next build (powerpc ppc64_defconfig) produced these
warnings:

fs/cifs/cifssmb.c: In function 'CIFSSMBNegotiate':
fs/cifs/cifssmb.c:605:3: warning: 'strncpy' writing 16 bytes into a region of size 1 overflows the destination [-Wstringop-overflow=]
strncpy(pSMB->DialectsArray+count, protocols[i].name, 16);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In function 'get_sensor_index_attr',
inlined from 'create_device_attrs' at drivers/hwmon/ibmpowernv.c:293:8,
inlined from 'ibmpowernv_probe' at drivers/hwmon/ibmpowernv.c:699:8:
drivers/hwmon/ibmpowernv.c:256:2: warning: 'strncpy' specified bound 32 equals destination size [-Wstringop-truncation]
strncpy(attr, dash_pos + 1, MAX_ATTR_LEN);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fs/hfsplus/xattr.c: In function 'copy_name':
fs/hfsplus/xattr.c:416:3: warning: 'strncpy' output truncated before terminating nul copying 4 bytes from a string of the same length [-Wstringop-truncation]
strncpy(buffer, XATTR_MAC_OSX_PREFIX, XATTR_MAC_OSX_PREFIX_LEN);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fs/ext4/super.c: In function '__save_error_info':
fs/ext4/super.c:344:2: warning: 'strncpy' specified bound 32 equals destination size [-Wstringop-truncation]
strncpy(es->s_last_error_func, func, sizeof(es->s_last_error_func));
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fs/ext4/super.c:349:3: warning: 'strncpy' specified bound 32 equals destination size [-Wstringop-truncation]
strncpy(es->s_first_error_func, func,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
sizeof(es->s_first_error_func));
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from include/trace/define_trace.h:97,
from include/trace/events/writeback.h:762,
from fs/fs-writeback.c:98:
include/trace/events/writeback.h: In function 'perf_trace_writeback_work_class':
include/trace/events/writeback.h:223:3: warning: 'strncpy' specified bound 32 equals destination size [-Wstringop-truncation]
strncpy(__entry->name,
^~~~~~~~~~~~~~~~~~~~~~
wb->bdi->dev ? dev_name(wb->bdi->dev) : "(unknown)", 32);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/trace/perf.h:66:4: note: in definition of macro 'DECLARE_EVENT_CLASS'
{ assign; } \
^~~~~~
include/trace/events/writeback.h:222:2: note: in expansion of macro 'TP_fast_assign'
TP_fast_assign(
^~~~~~~~~~~~~~
include/trace/events/writeback.h: In function 'perf_trace_writeback_class':
include/trace/events/writeback.h:277:3: warning: 'strncpy' specified bound 32 equals destination size [-Wstringop-truncation]
strncpy(__entry->name, dev_name(wb->bdi->dev), 32);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/trace/perf.h:66:4: note: in definition of macro 'DECLARE_EVENT_CLASS'
{ assign; } \
^~~~~~
include/trace/events/writeback.h:276:2: note: in expansion of macro 'TP_fast_assign'
TP_fast_assign(
^~~~~~~~~~~~~~
include/trace/events/writeback.h: In function 'perf_trace_writeback_bdi_register':
include/trace/events/writeback.h:299:3: warning: 'strncpy' specified bound 32 equals destination size [-Wstringop-truncation]
strncpy(__entry->name, dev_name(bdi->dev), 32);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/trace/perf.h:66:4: note: in definition of macro 'DECLARE_EVENT_CLASS'
{ assign; } \
^~~~~~
include/trace/trace_events.h:78:9: note: in expansion of macro 'PARAMS'
PARAMS(assign), \
^~~~~~
include/trace/events/writeback.h:292:1: note: in expansion of macro 'TRACE_EVENT'
TRACE_EVENT(writeback_bdi_register,
^~~~~~~~~~~
include/trace/events/writeback.h:298:2: note: in expansion of macro 'TP_fast_assign'
TP_fast_assign(
^~~~~~~~~~~~~~
include/trace/events/writeback.h: In function 'perf_trace_wbc_class':
include/trace/events/writeback.h:324:3: warning: 'strncpy' specified bound 32 equals destination size [-Wstringop-truncation]
strncpy(__entry->name, dev_name(bdi->dev), 32);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/trace/perf.h:66:4: note: in definition of macro 'DECLARE_EVENT_CLASS'
{ assign; } \
^~~~~~
include/trace/events/writeback.h:323:2: note: in expansion of macro 'TP_fast_assign'
TP_fast_assign(
^~~~~~~~~~~~~~
include/trace/events/writeback.h: In function 'perf_trace_writeback_queue_io':
include/trace/events/writeback.h:375:3: warning: 'strncpy' specified bound 32 equals destination size [-Wstringop-truncation]
strncpy(__entry->name, dev_name(wb->bdi->dev), 32);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/trace/perf.h:66:4: note: in definition of macro 'DECLARE_EVENT_CLASS'
{ assign; } \
^~~~~~
include/trace/trace_events.h:78:9: note: in expansion of macro 'PARAMS'
PARAMS(assign), \
^~~~~~
include/trace/events/writeback.h:360:1: note: in expansion of macro 'TRACE_EVENT'
TRACE_EVENT(writeback_queue_io,
^~~~~~~~~~~
include/trace/events/writeback.h:373:2: note: in expansion of macro 'TP_fast_assign'
TP_fast_assign(
^~~~~~~~~~~~~~
include/trace/events/writeback.h: In function 'perf_trace_writeback_dirty_page':
include/trace/events/writeback.h:69:3: warning: 'strncpy' specified bound 32 equals destination size [-Wstringop-truncation]
strncpy(__entry->name,
^~~~~~~~~~~~~~~~~~~~~~
mapping ? dev_name(inode_to_bdi(mapping->host)->dev) : "(unknown)", 32);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/trace/perf.h:66:4: note: in definition of macro 'DECLARE_EVENT_CLASS'
{ assign; } \
^~~~~~
include/trace/trace_events.h:78:9: note: in expansion of macro 'PARAMS'
PARAMS(assign), \
^~~~~~
include/trace/events/writeback.h:56:1: note: in expansion of macro 'TRACE_EVENT'
TRACE_EVENT(writeback_dirty_page,
^~~~~~~~~~~
include/trace/events/writeback.h:68:2: note: in expansion of macro 'TP_fast_assign'
TP_fast_assign(
^~~~~~~~~~~~~~
include/trace/events/writeback.h: In function 'perf_trace_writeback_dirty_inode_template':
include/trace/events/writeback.h:99:3: warning: 'strncpy' specified bound 32 equals destination size [-Wstringop-truncation]
strncpy(__entry->name,
^~~~~~~~~~~~~~~~~~~~~~
bdi->dev ? dev_name(bdi->dev) : "(unknown)", 32);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/trace/perf.h:66:4: note: in definition of macro 'DECLARE_EVENT_CLASS'
{ assign; } \
^~~~~~
include/trace/events/writeback.h:95:2: note: in expansion of macro 'TP_fast_assign'
TP_fast_assign(
^~~~~~~~~~~~~~
include/trace/events/writeback.h: In function 'perf_trace_writeback_write_inode_template':
include/trace/events/writeback.h:179:3: warning: 'strncpy' specified bound 32 equals destination size [-Wstringop-truncation]
strncpy(__entry->name,
^~~~~~~~~~~~~~~~~~~~~~
dev_name(inode_to_bdi(inode)->dev), 32);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/trace/perf.h:66:4: note: in definition of macro 'DECLARE_EVENT_CLASS'
{ assign; } \
^~~~~~
include/trace/events/writeback.h:178:2: note: in expansion of macro 'TP_fast_assign'
TP_fast_assign(
^~~~~~~~~~~~~~
include/trace/events/writeback.h: In function 'perf_trace_writeback_sb_inodes_requeue':
include/trace/events/writeback.h:586:3: warning: 'strncpy' specified bound 32 equals destination size [-Wstringop-truncation]
strncpy(__entry->name,
^~~~~~~~~~~~~~~~~~~~~~
dev_name(inode_to_bdi(inode)->dev), 32);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/trace/perf.h:66:4: note: in definition of macro 'DECLARE_EVENT_CLASS'
{ assign; } \
^~~~~~
include/trace/trace_events.h:78:9: note: in expansion of macro 'PARAMS'
PARAMS(assign), \
^~~~~~
include/trace/events/writeback.h:572:1: note: in expansion of macro 'TRACE_EVENT'
TRACE_EVENT(writeback_sb_inodes_requeue,
^~~~~~~~~~~
include/trace/events/writeback.h:585:2: note: in expansion of macro 'TP_fast_assign'
TP_fast_assign(
^~~~~~~~~~~~~~
include/trace/events/writeback.h:586:3: warning: 'strncpy' specified bound 32 equals destination size [-Wstringop-truncation]
strncpy(__entry->name,
^~~~~~~~~~~~~~~~~~~~~~
dev_name(inode_to_bdi(inode)->dev), 32);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/trace/perf.h:66:4: note: in definition of macro 'DECLARE_EVENT_CLASS'
{ assign; } \
^~~~~~
include/trace/trace_events.h:78:9: note: in expansion of macro 'PARAMS'
PARAMS(assign), \
^~~~~~
include/trace/events/writeback.h:572:1: note: in expansion of macro 'TRACE_EVENT'
TRACE_EVENT(writeback_sb_inodes_requeue,
^~~~~~~~~~~
include/trace/events/writeback.h:585:2: note: in expansion of macro 'TP_fast_assign'
TP_fast_assign(
^~~~~~~~~~~~~~
include/trace/events/writeback.h:586:3: warning: 'strncpy' specified bound 32 equals destination size [-Wstringop-truncation]
strncpy(__entry->name,
^~~~~~~~~~~~~~~~~~~~~~
dev_name(inode_to_bdi(inode)->dev), 32);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/trace/perf.h:66:4: note: in definition of macro 'DECLARE_EVENT_CLASS'
{ assign; } \
^~~~~~
include/trace/trace_events.h:78:9: note: in expansion of macro 'PARAMS'
PARAMS(assign), \
^~~~~~
include/trace/events/writeback.h:572:1: note: in expansion of macro 'TRACE_EVENT'
TRACE_EVENT(writeback_sb_inodes_requeue,
^~~~~~~~~~~
include/trace/events/writeback.h:585:2: note: in expansion of macro 'TP_fast_assign'
TP_fast_assign(
^~~~~~~~~~~~~~
include/trace/events/writeback.h:586:3: warning: 'strncpy' specified bound 32 equals destination size [-Wstringop-truncation]
strncpy(__entry->name,
^~~~~~~~~~~~~~~~~~~~~~
dev_name(inode_to_bdi(inode)->dev), 32);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/trace/perf.h:66:4: note: in definition of macro 'DECLARE_EVENT_CLASS'
{ assign; } \
^~~~~~
include/trace/trace_events.h:78:9: note: in expansion of macro 'PARAMS'
PARAMS(assign), \
^~~~~~
include/trace/events/writeback.h:572:1: note: in expansion of macro 'TRACE_EVENT'
TRACE_EVENT(writeback_sb_inodes_requeue,
^~~~~~~~~~~
include/trace/events/writeback.h:585:2: note: in expansion of macro 'TP_fast_assign'
TP_fast_assign(
^~~~~~~~~~~~~~
include/trace/events/writeback.h: In function 'perf_trace_writeback_single_inode_template':
include/trace/events/writeback.h:660:3: warning: 'strncpy' specified bound 32 equals destination size [-Wstringop-truncation]
strncpy(__entry->name,
^~~~~~~~~~~~~~~~~~~~~~
dev_name(inode_to_bdi(inode)->dev), 32);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/trace/perf.h:66:4: note: in definition of macro 'DECLARE_EVENT_CLASS'
{ assign; } \
^~~~~~
include/trace/events/writeback.h:659:2: note: in expansion of macro 'TP_fast_assign'
TP_fast_assign(
^~~~~~~~~~~~~~
In file included from include/trace/define_trace.h:96,
from include/trace/events/writeback.h:762,
from fs/fs-writeback.c:98:
include/trace/events/writeback.h: In function 'trace_event_raw_event_writeback_dirty_page':
include/trace/events/writeback.h:69:3: warning: 'strncpy' specified bound 32 equals destination size [-Wstringop-truncation]
strncpy(__entry->name,
^~~~~~~~~~~~~~~~~~~~~~
mapping ? dev_name(inode_to_bdi(mapping->host)->dev) : "(unknown)", 32);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/trace/trace_events.h:720:4: note: in definition of macro 'DECLARE_EVENT_CLASS'
{ assign; } \
^~~~~~
include/trace/trace_events.h:78:9: note: in expansion of macro 'PARAMS'
PARAMS(assign), \
^~~~~~
include/trace/events/writeback.h:56:1: note: in expansion of macro 'TRACE_EVENT'
TRACE_EVENT(writeback_dirty_page,
^~~~~~~~~~~
include/trace/events/writeback.h:68:2: note: in expansion of macro 'TP_fast_assign'
TP_fast_assign(
^~~~~~~~~~~~~~
include/trace/events/writeback.h: In function 'trace_event_raw_event_writeback_dirty_inode_template':
include/trace/events/writeback.h:99:3: warning: 'strncpy' specified bound 32 equals destination size [-Wstringop-truncation]
strncpy(__entry->name,
^~~~~~~~~~~~~~~~~~~~~~
bdi->dev ? dev_name(bdi->dev) : "(unknown)", 32);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/trace/trace_events.h:720:4: note: in definition of macro 'DECLARE_EVENT_CLASS'
{ assign; } \
^~~~~~
include/trace/events/writeback.h:95:2: note: in expansion of macro 'TP_fast_assign'
TP_fast_assign(
^~~~~~~~~~~~~~
include/trace/events/writeback.h: In function 'trace_event_raw_event_writeback_write_inode_template':
include/trace/events/writeback.h:179:3: warning: 'strncpy' specified bound 32 equals destination size [-Wstringop-truncation]
strncpy(__entry->name,
^~~~~~~~~~~~~~~~~~~~~~
dev_name(inode_to_bdi(inode)->dev), 32);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/trace/trace_events.h:720:4: note: in definition of macro 'DECLARE_EVENT_CLASS'
{ assign; } \
^~~~~~
include/trace/events/writeback.h:178:2: note: in expansion of macro 'TP_fast_assign'
TP_fast_assign(
^~~~~~~~~~~~~~
include/trace/events/writeback.h: In function 'trace_event_raw_event_writeback_work_class':
include/trace/events/writeback.h:223:3: warning: 'strncpy' specified bound 32 equals destination size [-Wstringop-truncation]
strncpy(__entry->name,
^~~~~~~~~~~~~~~~~~~~~~
wb->bdi->dev ? dev_name(wb->bdi->dev) : "(unknown)", 32);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/trace/trace_events.h:720:4: note: in definition of macro 'DECLARE_EVENT_CLASS'
{ assign; } \
^~~~~~
include/trace/events/writeback.h:222:2: note: in expansion of macro 'TP_fast_assign'
TP_fast_assign(
^~~~~~~~~~~~~~
include/trace/events/writeback.h: In function 'trace_event_raw_event_writeback_class':
include/trace/events/writeback.h:277:3: warning: 'strncpy' specified bound 32 equals destination size [-Wstringop-truncation]
strncpy(__entry->name, dev_name(wb->bdi->dev), 32);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/trace/trace_events.h:720:4: note: in definition of macro 'DECLARE_EVENT_CLASS'
{ assign; } \
^~~~~~
include/trace/events/writeback.h:276:2: note: in expansion of macro 'TP_fast_assign'
TP_fast_assign(
^~~~~~~~~~~~~~
include/trace/events/writeback.h: In function 'trace_event_raw_event_writeback_bdi_register':
include/trace/events/writeback.h:299:3: warning: 'strncpy' specified bound 32 equals destination size [-Wstringop-truncation]
strncpy(__entry->name, dev_name(bdi->dev), 32);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/trace/trace_events.h:720:4: note: in definition of macro 'DECLARE_EVENT_CLASS'
{ assign; } \
^~~~~~
include/trace/trace_events.h:78:9: note: in expansion of macro 'PARAMS'
PARAMS(assign), \
^~~~~~
include/trace/events/writeback.h:292:1: note: in expansion of macro 'TRACE_EVENT'
TRACE_EVENT(writeback_bdi_register,
^~~~~~~~~~~
include/trace/events/writeback.h:298:2: note: in expansion of macro 'TP_fast_assign'
TP_fast_assign(
^~~~~~~~~~~~~~
include/trace/events/writeback.h: In function 'trace_event_raw_event_wbc_class':
include/trace/events/writeback.h:324:3: warning: 'strncpy' specified bound 32 equals destination size [-Wstringop-truncation]
strncpy(__entry->name, dev_name(bdi->dev), 32);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/trace/trace_events.h:720:4: note: in definition of macro 'DECLARE_EVENT_CLASS'
{ assign; } \
^~~~~~
include/trace/events/writeback.h:323:2: note: in expansion of macro 'TP_fast_assign'
TP_fast_assign(
^~~~~~~~~~~~~~
include/trace/events/writeback.h: In function 'trace_event_raw_event_writeback_queue_io':
include/trace/events/writeback.h:375:3: warning: 'strncpy' specified bound 32 equals destination size [-Wstringop-truncation]
strncpy(__entry->name, dev_name(wb->bdi->dev), 32);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/trace/trace_events.h:720:4: note: in definition of macro 'DECLARE_EVENT_CLASS'
{ assign; } \
^~~~~~
include/trace/trace_events.h:78:9: note: in expansion of macro 'PARAMS'
PARAMS(assign), \
^~~~~~
include/trace/events/writeback.h:360:1: note: in expansion of macro 'TRACE_EVENT'
TRACE_EVENT(writeback_queue_io,
^~~~~~~~~~~
include/trace/events/writeback.h:373:2: note: in expansion of macro 'TP_fast_assign'
TP_fast_assign(
^~~~~~~~~~~~~~
include/trace/events/writeback.h: In function 'trace_event_raw_event_writeback_sb_inodes_requeue':
include/trace/events/writeback.h:586:3: warning: 'strncpy' specified bound 32 equals destination size [-Wstringop-truncation]
strncpy(__entry->name,
^~~~~~~~~~~~~~~~~~~~~~
dev_name(inode_to_bdi(inode)->dev), 32);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/trace/trace_events.h:720:4: note: in definition of macro 'DECLARE_EVENT_CLASS'
{ assign; } \
^~~~~~
include/trace/trace_events.h:78:9: note: in expansion of macro 'PARAMS'
PARAMS(assign), \
^~~~~~
include/trace/events/writeback.h:572:1: note: in expansion of macro 'TRACE_EVENT'
TRACE_EVENT(writeback_sb_inodes_requeue,
^~~~~~~~~~~
include/trace/events/writeback.h:585:2: note: in expansion of macro 'TP_fast_assign'
TP_fast_assign(
^~~~~~~~~~~~~~
include/trace/events/writeback.h:586:3: warning: 'strncpy' specified bound 32 equals destination size [-Wstringop-truncation]
strncpy(__entry->name,
^~~~~~~~~~~~~~~~~~~~~~
dev_name(inode_to_bdi(inode)->dev), 32);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/trace/trace_events.h:720:4: note: in definition of macro 'DECLARE_EVENT_CLASS'
{ assign; } \
^~~~~~
include/trace/trace_events.h:78:9: note: in expansion of macro 'PARAMS'
PARAMS(assign), \
^~~~~~
include/trace/events/writeback.h:572:1: note: in expansion of macro 'TRACE_EVENT'
TRACE_EVENT(writeback_sb_inodes_requeue,
^~~~~~~~~~~
include/trace/events/writeback.h:585:2: note: in expansion of macro 'TP_fast_assign'
TP_fast_assign(
^~~~~~~~~~~~~~
include/trace/events/writeback.h:586:3: warning: 'strncpy' specified bound 32 equals destination size [-Wstringop-truncation]
strncpy(__entry->name,
^~~~~~~~~~~~~~~~~~~~~~
dev_name(inode_to_bdi(inode)->dev), 32);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/trace/trace_events.h:720:4: note: in definition of macro 'DECLARE_EVENT_CLASS'
{ assign; } \
^~~~~~
include/trace/trace_events.h:78:9: note: in expansion of macro 'PARAMS'
PARAMS(assign), \
^~~~~~
include/trace/events/writeback.h:572:1: note: in expansion of macro 'TRACE_EVENT'
TRACE_EVENT(writeback_sb_inodes_requeue,
^~~~~~~~~~~
include/trace/events/writeback.h:585:2: note: in expansion of macro 'TP_fast_assign'
TP_fast_assign(
^~~~~~~~~~~~~~
include/trace/events/writeback.h:586:3: warning: 'strncpy' specified bound 32 equals destination size [-Wstringop-truncation]
strncpy(__entry->name,
^~~~~~~~~~~~~~~~~~~~~~
dev_name(inode_to_bdi(inode)->dev), 32);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/trace/trace_events.h:720:4: note: in definition of macro 'DECLARE_EVENT_CLASS'
{ assign; } \
^~~~~~
include/trace/trace_events.h:78:9: note: in expansion of macro 'PARAMS'
PARAMS(assign), \
^~~~~~
include/trace/events/writeback.h:572:1: note: in expansion of macro 'TRACE_EVENT'
TRACE_EVENT(writeback_sb_inodes_requeue,
^~~~~~~~~~~
include/trace/events/writeback.h:585:2: note: in expansion of macro 'TP_fast_assign'
TP_fast_assign(
^~~~~~~~~~~~~~
include/trace/events/writeback.h: In function 'trace_event_raw_event_writeback_single_inode_template':
include/trace/events/writeback.h:660:3: warning: 'strncpy' specified bound 32 equals destination size [-Wstringop-truncation]
strncpy(__entry->name,
^~~~~~~~~~~~~~~~~~~~~~
dev_name(inode_to_bdi(inode)->dev), 32);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/trace/trace_events.h:720:4: note: in definition of macro 'DECLARE_EVENT_CLASS'
{ assign; } \
^~~~~~
include/trace/events/writeback.h:659:2: note: in expansion of macro 'TP_fast_assign'
TP_fast_assign(
^~~~~~~~~~~~~~
In function 'i40e_ptp_create_clock',
inlined from 'i40e_ptp_init' at drivers/net/ethernet/intel/i40e/i40e_ptp.c:755:8:
drivers/net/ethernet/intel/i40e/i40e_ptp.c:697:2: warning: 'strncpy' specified bound 16 equals destination size [-Wstringop-truncation]
strncpy(pf->ptp_caps.name, i40e_driver_name, sizeof(pf->ptp_caps.name));
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/scsi/qla2xxx/qla_mr.c: In function 'qlafx00_fx_disc':
drivers/scsi/qla2xxx/qla_mr.c:1882:4: warning: 'strncpy' output may be truncated copying 64 bytes from a string of length 64 [-Wstringop-truncation]
strncpy(phost_info->nodename,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p_sysid->nodename, NODENAME_LENGTH);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/scsi/qla2xxx/qla_mr.c:1886:4: warning: 'strncpy' output may be truncated copying 64 bytes from a string of length 64 [-Wstringop-truncation]
strncpy(phost_info->release,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
p_sysid->release, RELEASE_LENGTH);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/scsi/qla2xxx/qla_mr.c:1888:4: warning: 'strncpy' output may be truncated copying 64 bytes from a string of length 64 [-Wstringop-truncation]
strncpy(phost_info->version,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
p_sysid->version, VERSION_LENGTH);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/scsi/qla2xxx/qla_mr.c:1890:4: warning: 'strncpy' output may be truncated copying 64 bytes from a string of length 64 [-Wstringop-truncation]
strncpy(phost_info->machine,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
p_sysid->machine, MACHINE_LENGTH);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/scsi/qla2xxx/qla_mr.c:1892:4: warning: 'strncpy' output may be truncated copying 64 bytes from a string of length 64 [-Wstringop-truncation]
strncpy(phost_info->domainname,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
p_sysid->domainname, DOMNAME_LENGTH);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In function 'ibmvfc_gather_partition_info',
inlined from 'ibmvfc_npiv_login' at drivers/scsi/ibmvscsi/ibmvfc.c:4098:2:
drivers/scsi/ibmvscsi/ibmvfc.c:1156:3: warning: 'strncpy' specified bound 97 equals destination size [-Wstringop-truncation]
strncpy(vhost->partition_name, name, sizeof(vhost->partition_name));
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In function 'ibmvfc_set_login_info',
inlined from 'ibmvfc_npiv_login' at drivers/scsi/ibmvscsi/ibmvfc.c:4099:2:
drivers/scsi/ibmvscsi/ibmvfc.c:1194:2: warning: 'strncpy' specified bound 256 equals destination size [-Wstringop-truncation]
strncpy(login_info->device_name,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dev_name(&vhost->host->shost_gendev), IBMVFC_MAX_NAME);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/scsi/ibmvscsi/ibmvfc.c:1199:2: warning: 'strncpy' specified bound 256 equals destination size [-Wstringop-truncation]
strncpy(login_info->drc_name, location, IBMVFC_MAX_NAME);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Presumably caused by my update to gcc 8.2.0.

--
Cheers,
Stephen Rothwell


Attachments:
(No filename) (499.00 B)
OpenPGP digital signature

2018-08-19 22:17:51

by Stephen Rothwell

[permalink] [raw]
Subject: Re: linux-next: build warnings from Linus' tree

Hi all,

On Mon, 20 Aug 2018 08:13:23 +1000 Stephen Rothwell <[email protected]> wrote:
>
> Today's linux-next build (powerpc ppc64_defconfig) produced these
> warnings:
>
...
>
> Presumably caused by my update to gcc 8.2.0.

And this from the x86_64 allmodconfig build:

scripts/unifdef.c: In function 'Mpass':
scripts/unifdef.c:453:28: warning: 'strncpy' output truncated before terminating nul copying 4 bytes from a string of the same length [-Wstringop-truncation]
static void Mpass (void) { strncpy(keyword, "if ", 4); Pelif(); }
^~~~~~~~~~~~~~~~~~~~~~~~~~~

--
Cheers,
Stephen Rothwell


Attachments:
(No filename) (499.00 B)
OpenPGP digital signature

2018-08-19 22:44:07

by Stephen Rothwell

[permalink] [raw]
Subject: Re: linux-next: build warnings from Linus' tree

Hi all,

On Mon, 20 Aug 2018 08:16:18 +1000 Stephen Rothwell <[email protected]> wrote:
>
> On Mon, 20 Aug 2018 08:13:23 +1000 Stephen Rothwell <[email protected]> wrote:
> >
> > Today's linux-next build (powerpc ppc64_defconfig) produced these
> > warnings:
> >
> ...
> >
> > Presumably caused by my update to gcc 8.2.0.
>
> And this from the x86_64 allmodconfig build:
>
> scripts/unifdef.c: In function 'Mpass':
> scripts/unifdef.c:453:28: warning: 'strncpy' output truncated before terminating nul copying 4 bytes from a string of the same length [-Wstringop-truncation]
> static void Mpass (void) { strncpy(keyword, "if ", 4); Pelif(); }
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~

Note that I only upgraded my (host) powerpc compiler.

--
Cheers,
Stephen Rothwell


Attachments:
(No filename) (499.00 B)
OpenPGP digital signature

2018-08-19 23:23:39

by Linus Torvalds

[permalink] [raw]
Subject: Re: linux-next: build warnings from Linus' tree

On Sun, Aug 19, 2018 at 3:13 PM Stephen Rothwell <[email protected]> wrote:
>
> Today's linux-next build (powerpc ppc64_defconfig) produced these
> warnings:
>
> fs/cifs/cifssmb.c:605:3: warning: 'strncpy' writing 16 bytes into a region of size 1 overflows the destination [-Wstringop-overflow=]
> strncpy(pSMB->DialectsArray+count, protocols[i].name, 16);
>
> Presumably caused by my update to gcc 8.2.0.

Yeah. There are some patches to mark some arrays as non-strings to get
rid of these, but we'll see. Maybe we'll just disable the new gcc
warning if it causes more pain than it is worth.

Linus

2018-08-20 00:03:43

by Theodore Ts'o

[permalink] [raw]
Subject: Re: linux-next: build warnings from Linus' tree

On Mon, Aug 20, 2018 at 08:13:23AM +1000, Stephen Rothwell wrote:
> fs/ext4/super.c: In function '__save_error_info':
> fs/ext4/super.c:344:2: warning: 'strncpy' specified bound 32 equals destination size [-Wstringop-truncation]
> strncpy(es->s_last_error_func, func, sizeof(es->s_last_error_func));
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> fs/ext4/super.c:349:3: warning: 'strncpy' specified bound 32 equals destination size [-Wstringop-truncation]
> strncpy(es->s_first_error_func, func,
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> sizeof(es->s_first_error_func));
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

All of ext4 superblock char[] fields are not necessarily null
terminated, so this is a false positive. I suppose we could do
something like this:

inline char *
strncpy_I_solemnly_swear_I_know_what_I_am_doing(char *dest,
const char *src, size_t n)
{
#if __GNUC_PREREQ (8, 2)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wstringop-truncate"
#endif
return strncpy(dest, src, n);
#if __GNUC_PREREQ (8, 2)
#pragma GCC diagnostic pop
#endif
}

(if we really think this warning is worthwhile enough that we don't
just want to globally disable it, of course)

- Ted

P.S. It's really, really too bad there isn't a simpler way to shut up
gcc. You need the #ifdef __GNUC_PREREQ nonsense because otherwise
older versions of gcc that don't understand the particular warning
you're trying to suppress will complain loudly. (Ask me how I
know....)

2018-08-20 01:34:53

by Adam Borowski

[permalink] [raw]
Subject: Re: linux-next: build warnings from Linus' tree

On Sun, Aug 19, 2018 at 04:21:57PM -0700, Linus Torvalds wrote:
> On Sun, Aug 19, 2018 at 3:13 PM Stephen Rothwell <[email protected]> wrote:
> >
> > Today's linux-next build (powerpc ppc64_defconfig) produced these
> > warnings:
> >
> > fs/cifs/cifssmb.c:605:3: warning: 'strncpy' writing 16 bytes into a region of size 1 overflows the destination [-Wstringop-overflow=]
> > strncpy(pSMB->DialectsArray+count, protocols[i].name, 16);
> >
> > Presumably caused by my update to gcc 8.2.0.
>
> Yeah. There are some patches to mark some arrays as non-strings to get
> rid of these, but we'll see. Maybe we'll just disable the new gcc
> warning if it causes more pain than it is worth.

Every single use of strncpy() for a C string is either a bug, inefficiency,
or both. In this particular case the code:

count = 0;
for (i = 0; i < CIFS_NUM_PROT; i++) {
strncpy(pSMB->DialectsArray+count, protocols[i].name, 16);
count += strlen(protocols[i].name) + 1;
/* null at end of source and target buffers anyway */
}

* pointlessly clears 16 bytes in every iteration
* calculates the string's length twice
* there's no protection against buffer overflow anyway

So what is the strncpy() there for, when an unbounded copy would be just as
good? For other cases, there's a bunch of better functions: strlcpy(),
snprintf(), even strlen()+memcpy(), etc.

Valid uses of strncpy() do exist (such as SCSI structs), but those deal with
fixed-width fields. Thus, gcc is right for warning for at least some of
misuse of strncpy() for C strings. The function wasn't designed for them.

(Skipped analysis why strncpy is always a bad choice for C strings.)


Meow!
--
⢀⣴⠾⠻⢶⣦⠀ What Would Jesus Do, MUD/MMORPG edition:
⣾⠁⢰⠒⠀⣿⡁ • multiplay with an admin char to benefit your mortal [Mt3:16-17]
⢿⡄⠘⠷⠚⠋⠀ • abuse item cloning bugs [Mt14:17-20, Mt15:34-37]
⠈⠳⣄⠀⠀⠀⠀ • use glitches to walk on water [Mt14:25-26]

2018-08-20 02:55:29

by Theodore Ts'o

[permalink] [raw]
Subject: Re: linux-next: build warnings from Linus' tree

On Mon, Aug 20, 2018 at 03:33:19AM +0200, Adam Borowski wrote:
> Valid uses of strncpy() do exist (such as SCSI structs), but those deal with
> fixed-width fields. Thus, gcc is right for warning for at least some of
> misuse of strncpy() for C strings. The function wasn't designed for them.

The problem is that the kernel has a goodly share of fixed-width
fields. The ext4 superblock is one of them. strncpy() is the most
convenient function to do what is needed. If it's a valid use, then
we need to have a way to get gcc to shut up about them.

- Ted

2018-08-20 17:51:10

by Miguel Ojeda

[permalink] [raw]
Subject: Re: linux-next: build warnings from Linus' tree

Hi Ted,

On Mon, Aug 20, 2018 at 2:02 AM, Theodore Y. Ts'o <[email protected]> wrote:
> P.S. It's really, really too bad there isn't a simpler way to shut up
> gcc. You need the #ifdef __GNUC_PREREQ nonsense because otherwise
> older versions of gcc that don't understand the particular warning
> you're trying to suppress will complain loudly. (Ask me how I
> know....)

Please check out the __nonstring patch I sent (the one Linus is
referring to, I guess) and see if you think it would be a good
solution for your case:

https://lore.kernel.org/lkml/[email protected]/

I just tried the patch below with 8.2 [*] and those two warnings in
fs/ext4 go away as expected.

I think marking those fixed-width fields is a good idea anyway (i.e.
makes it clear that they are not meant to be null-terminated), but I
would like to hear opinions on the matter.

Cheers,
Miguel

[*]

diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h
index 0f0edd1cd0cd..3eef4b286895 100644
--- a/fs/ext4/ext4.h
+++ b/fs/ext4/ext4.h
@@ -1277,13 +1277,13 @@ struct ext4_super_block {
__le32 s_first_error_time; /* first time an error happened */
__le32 s_first_error_ino; /* inode involved in first error */
__le64 s_first_error_block; /* block involved of first error */
- __u8 s_first_error_func[32]; /* function where the error happened */
+ __u8 s_first_error_func[32] __nonstring; /* function
where the error happened */
__le32 s_first_error_line; /* line number where error happened */
__le32 s_last_error_time; /* most recent time of an error */
__le32 s_last_error_ino; /* inode involved in last error */
__le32 s_last_error_line; /* line number where error happened */
__le64 s_last_error_block; /* block involved of last error */
- __u8 s_last_error_func[32]; /* function where the error happened */
+ __u8 s_last_error_func[32] __nonstring; /* function
where the error happened */
#define EXT4_S_ERR_END offsetof(struct ext4_super_block, s_mount_opts)
__u8 s_mount_opts[64];
__le32 s_usr_quota_inum; /* inode for tracking user quota */