tree:   https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git 
master
head:   981467033a37d916649647fa3afe1fe99bba1817
commit: 6c5657d085ae8c13a8565b98e6a23fe68f0bede4 [1709/1739] bnxt_en: Add 
support for ethtool get dump.
config: ia64-allmodconfig (attached as .config)
compiler: ia64-linux-gcc (GCC) 8.1.0
reproduce:
        wget 
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
        chmod +x ~/bin/make.cross
        git checkout 6c5657d085ae8c13a8565b98e6a23fe68f0bede4
        # save the attached .config to linux build tree
        GCC_VERSION=8.1.0 make.cross ARCH=ia64 

All warnings (new ones prefixed by >>):

   In function 'bnxt_fill_coredump_record',
       inlined from 'bnxt_get_coredump' at 
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c:2980:3:
>> drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c:2863:2: warning: 'strncpy' 
>> output truncated before terminating nul copying as many bytes from a string 
>> as its length [-Wstringop-truncation]
     strncpy(record->system_name, utsname()->nodename,
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      strlen(utsname()->nodename));
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~

vim +/strncpy +2863 drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c

  2846  
  2847  static void
  2848  bnxt_fill_coredump_record(struct bnxt *bp, struct bnxt_coredump_record 
*record,
  2849                            time64_t start, s16 start_utc, u16 total_segs,
  2850                            int status)
  2851  {
  2852          time64_t end = ktime_get_real_seconds();
  2853          u32 os_ver_major = 0, os_ver_minor = 0;
  2854          struct tm tm;
  2855  
  2856          time64_to_tm(start, 0, &tm);
  2857          memset(record, 0, sizeof(*record));
  2858          strcpy(record->signature, "cOrE");
  2859          record->flags = 0;
  2860          record->low_version = 0;
  2861          record->high_version = 1;
  2862          record->asic_state = 0;
> 2863          strncpy(record->system_name, utsname()->nodename,
  2864                  strlen(utsname()->nodename));
  2865          record->year = cpu_to_le16(tm.tm_year);
  2866          record->month = cpu_to_le16(tm.tm_mon);
  2867          record->day = cpu_to_le16(tm.tm_mday);
  2868          record->hour = cpu_to_le16(tm.tm_hour);
  2869          record->minute = cpu_to_le16(tm.tm_min);
  2870          record->second = cpu_to_le16(tm.tm_sec);
  2871          record->utc_bias = cpu_to_le16(start_utc);
  2872          strcpy(record->commandline, "ethtool -w");
  2873          record->total_segments = cpu_to_le32(total_segs);
  2874  
  2875          sscanf(utsname()->release, "%u.%u", &os_ver_major, 
&os_ver_minor);
  2876          record->os_ver_major = cpu_to_le32(os_ver_major);
  2877          record->os_ver_minor = cpu_to_le32(os_ver_minor);
  2878  
  2879          strcpy(record->os_name, utsname()->sysname);
  2880          time64_to_tm(end, 0, &tm);
  2881          record->end_year = cpu_to_le16(tm.tm_year + 1900);
  2882          record->end_month = cpu_to_le16(tm.tm_mon + 1);
  2883          record->end_day = cpu_to_le16(tm.tm_mday);
  2884          record->end_hour = cpu_to_le16(tm.tm_hour);
  2885          record->end_minute = cpu_to_le16(tm.tm_min);
  2886          record->end_second = cpu_to_le16(tm.tm_sec);
  2887          record->end_utc_bias = cpu_to_le16(sys_tz.tz_minuteswest * 60);
  2888          record->asic_id1 = cpu_to_le32(bp->chip_num << 16 |
  2889                                         bp->ver_resp.chip_rev << 8 |
  2890                                         bp->ver_resp.chip_metal);
  2891          record->asic_id2 = 0;
  2892          record->coredump_status = cpu_to_le32(status);
  2893          record->ioctl_low_version = 0;
  2894          record->ioctl_high_version = 0;
  2895  }
  2896  
  2897  static int bnxt_get_coredump(struct bnxt *bp, void *buf, u32 *dump_len)
  2898  {
  2899          u32 ver_get_resp_len = sizeof(struct hwrm_ver_get_output);
  2900          struct coredump_segment_record *seg_record = NULL;
  2901          u32 offset = 0, seg_hdr_len, seg_record_len;
  2902          struct bnxt_coredump_segment_hdr seg_hdr;
  2903          struct bnxt_coredump_record coredump_rec;
  2904          struct bnxt_coredump coredump = {NULL};
  2905          time64_t start_time;
  2906          u16 start_utc;
  2907          int rc = 0, i;
  2908  
  2909          start_time = ktime_get_real_seconds();
  2910          start_utc = sys_tz.tz_minuteswest * 60;
  2911          seg_hdr_len = sizeof(seg_hdr);
  2912  
  2913          /* First segment should be hwrm_ver_get response */
  2914          *dump_len = seg_hdr_len + ver_get_resp_len;
  2915          if (buf) {
  2916                  bnxt_fill_coredump_seg_hdr(bp, &seg_hdr, NULL, 
ver_get_resp_len,
  2917                                             0, 0, 0);
  2918                  memcpy(buf + offset, &seg_hdr, seg_hdr_len);
  2919                  offset += seg_hdr_len;
  2920                  memcpy(buf + offset, &bp->ver_resp, ver_get_resp_len);
  2921                  offset += ver_get_resp_len;
  2922          }
  2923  
  2924          rc = bnxt_hwrm_dbg_coredump_list(bp, &coredump);
  2925          if (rc) {
  2926                  netdev_err(bp->dev, "Failed to get coredump segment 
list\n");
  2927                  goto err;
  2928          }
  2929  
  2930          *dump_len += seg_hdr_len * coredump.total_segs;
  2931  
  2932          seg_record = (struct coredump_segment_record *)coredump.data;
  2933          seg_record_len = sizeof(*seg_record);
  2934  
  2935          for (i = 0; i < coredump.total_segs; i++) {
  2936                  u16 comp_id = le16_to_cpu(seg_record->component_id);
  2937                  u16 seg_id = le16_to_cpu(seg_record->segment_id);
  2938                  u32 duration = 0, seg_len = 0;
  2939                  unsigned long start, end;
  2940  
  2941                  start = jiffies;
  2942  
  2943                  rc = bnxt_hwrm_dbg_coredump_initiate(bp, comp_id, 
seg_id);
  2944                  if (rc) {
  2945                          netdev_err(bp->dev,
  2946                                     "Failed to initiate coredump for seg 
= %d\n",
  2947                                     seg_record->segment_id);
  2948                          goto next_seg;
  2949                  }
  2950  
  2951                  /* Write segment data into the buffer */
  2952                  rc = bnxt_hwrm_dbg_coredump_retrieve(bp, comp_id, 
seg_id,
  2953                                                       &seg_len, buf,
  2954                                                       offset + 
seg_hdr_len);
  2955                  if (rc)
  2956                          netdev_err(bp->dev,
  2957                                     "Failed to retrieve coredump for seg 
= %d\n",
  2958                                     seg_record->segment_id);
  2959  
  2960  next_seg:
  2961                  end = jiffies;
  2962                  duration = jiffies_to_msecs(end - start);
  2963                  bnxt_fill_coredump_seg_hdr(bp, &seg_hdr, seg_record, 
seg_len,
  2964                                             rc, duration, 0);
  2965  
  2966                  if (buf) {
  2967                          /* Write segment header into the buffer */
  2968                          memcpy(buf + offset, &seg_hdr, seg_hdr_len);
  2969                          offset += seg_hdr_len + seg_len;
  2970                  }
  2971  
  2972                  *dump_len += seg_len;
  2973                  seg_record =
  2974                          (struct coredump_segment_record *)((u8 
*)seg_record +
  2975                                                             
seg_record_len);
  2976          }
  2977  
  2978  err:
  2979          if (buf) {
> 2980                  bnxt_fill_coredump_record(bp, &coredump_rec, start_time,
  2981                                            start_utc, 
coredump.total_segs + 1,
  2982                                            rc);
  2983                  memcpy(buf + offset, &coredump_rec, 
sizeof(coredump_rec));
  2984          }
  2985          kfree(coredump.data);
  2986          *dump_len += sizeof(coredump_rec);
  2987  
  2988          return rc;
  2989  }
  2990  

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip

Reply via email to