mirror of
https://github.com/Dasharo/linux.git
synced 2026-03-06 15:25:10 -08:00
Merge tag 'overflow-v5.16-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux
Pull overflow updates from Kees Cook:
"The end goal of the current buffer overflow detection work[0] is to
gain full compile-time and run-time coverage of all detectable buffer
overflows seen via array indexing or memcpy(), memmove(), and
memset(). The str*() family of functions already have full coverage.
While much of the work for these changes have been on-going for many
releases (i.e. 0-element and 1-element array replacements, as well as
avoiding false positives and fixing discovered overflows[1]), this
series contains the foundational elements of several related buffer
overflow detection improvements by providing new common helpers and
FORTIFY_SOURCE changes needed to gain the introspection required for
compiler visibility into array sizes. Also included are a handful of
already Acked instances using the helpers (or related clean-ups), with
many more waiting at the ready to be taken via subsystem-specific
trees[2].
The new helpers are:
- struct_group() for gaining struct member range introspection
- memset_after() and memset_startat() for clearing to the end of
structures
- DECLARE_FLEX_ARRAY() for using flex arrays in unions or alone in
structs
Also included is the beginning of the refactoring of FORTIFY_SOURCE to
support memcpy() introspection, fix missing and regressed coverage
under GCC, and to prepare to fix the currently broken Clang support.
Finishing this work is part of the larger series[0], but depends on
all the false positives and buffer overflow bug fixes to have landed
already and those that depend on this series to land.
As part of the FORTIFY_SOURCE refactoring, a set of both a
compile-time and run-time tests are added for FORTIFY_SOURCE and the
mem*()-family functions respectively. The compile time tests have
found a legitimate (though corner-case) bug[6] already.
Please note that the appearance of "panic" and "BUG" in the
FORTIFY_SOURCE refactoring are the result of relocating existing code,
and no new use of those code-paths are expected nor desired.
Finally, there are two tree-wide conversions for 0-element arrays and
flexible array unions to gain sane compiler introspection coverage
that result in no known object code differences.
After this series (and the changes that have now landed via netdev and
usb), we are very close to finally being able to build with
-Warray-bounds and -Wzero-length-bounds.
However, due corner cases in GCC[3] and Clang[4], I have not included
the last two patches that turn on these options, as I don't want to
introduce any known warnings to the build. Hopefully these can be
solved soon"
Link: https://lore.kernel.org/lkml/20210818060533.3569517-1-keescook@chromium.org/ [0]
Link: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/?qt=grep&q=FORTIFY_SOURCE [1]
Link: https://lore.kernel.org/lkml/202108220107.3E26FE6C9C@keescook/ [2]
Link: https://lore.kernel.org/lkml/3ab153ec-2798-da4c-f7b1-81b0ac8b0c5b@roeck-us.net/ [3]
Link: https://bugs.llvm.org/show_bug.cgi?id=51682 [4]
Link: https://lore.kernel.org/lkml/202109051257.29B29745C0@keescook/ [5]
Link: https://lore.kernel.org/lkml/20211020200039.170424-1-keescook@chromium.org/ [6]
* tag 'overflow-v5.16-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux: (30 commits)
fortify: strlen: Avoid shadowing previous locals
compiler-gcc.h: Define __SANITIZE_ADDRESS__ under hwaddress sanitizer
treewide: Replace 0-element memcpy() destinations with flexible arrays
treewide: Replace open-coded flex arrays in unions
stddef: Introduce DECLARE_FLEX_ARRAY() helper
btrfs: Use memset_startat() to clear end of struct
string.h: Introduce memset_startat() for wiping trailing members and padding
xfrm: Use memset_after() to clear padding
string.h: Introduce memset_after() for wiping trailing members/padding
lib: Introduce CONFIG_MEMCPY_KUNIT_TEST
fortify: Add compile-time FORTIFY_SOURCE tests
fortify: Allow strlen() and strnlen() to pass compile-time known lengths
fortify: Prepare to improve strnlen() and strlen() warnings
fortify: Fix dropped strcpy() compile-time write overflow check
fortify: Explicitly disable Clang support
fortify: Move remaining fortify helpers into fortify-string.h
lib/string: Move helper functions out of string.c
compiler_types.h: Remove __compiletime_object_size()
cm4000_cs: Use struct_group() to zero struct cm4000_dev region
can: flexcan: Use struct_group() to zero struct flexcan_regs regions
...
This commit is contained in:
@@ -7341,6 +7341,15 @@ L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/ethernet/nvidia/*
|
||||
|
||||
FORTIFY_SOURCE
|
||||
M: Kees Cook <keescook@chromium.org>
|
||||
L: linux-hardening@vger.kernel.org
|
||||
S: Supported
|
||||
F: include/linux/fortify-string.h
|
||||
F: lib/test_fortify/*
|
||||
F: scripts/test_fortify.sh
|
||||
K: \b__NO_FORTIFY\b
|
||||
|
||||
FPGA DFL DRIVERS
|
||||
M: Wu Hao <hao.wu@intel.com>
|
||||
R: Tom Rix <trix@redhat.com>
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
* Small subset of simple string routines
|
||||
*/
|
||||
|
||||
#define __NO_FORTIFY
|
||||
#include <linux/string.h>
|
||||
|
||||
/*
|
||||
|
||||
@@ -8,6 +8,9 @@
|
||||
*/
|
||||
|
||||
#define IN_ARCH_STRING_C 1
|
||||
#ifndef __NO_FORTIFY
|
||||
# define __NO_FORTIFY
|
||||
#endif
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/string.h>
|
||||
|
||||
@@ -14,6 +14,8 @@
|
||||
#undef CONFIG_KASAN
|
||||
#undef CONFIG_KASAN_GENERIC
|
||||
|
||||
#define __NO_FORTIFY
|
||||
|
||||
/* cpu_feature_enabled() cannot be used this early */
|
||||
#define USE_EARLY_PGTABLE_L5
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
#include "misc.h"
|
||||
#include <linux/efi.h>
|
||||
#include <asm/e820/types.h>
|
||||
#include <asm/processor.h>
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
* strings.
|
||||
*/
|
||||
|
||||
#define __NO_FORTIFY
|
||||
#include <linux/string.h>
|
||||
#include <linux/export.h>
|
||||
|
||||
|
||||
@@ -116,8 +116,9 @@ struct cm4000_dev {
|
||||
wait_queue_head_t atrq; /* wait for ATR valid */
|
||||
wait_queue_head_t readq; /* used by write to wake blk.read */
|
||||
|
||||
/* warning: do not move this fields.
|
||||
/* warning: do not move this struct group.
|
||||
* initialising to zero depends on it - see ZERO_DEV below. */
|
||||
struct_group(init,
|
||||
unsigned char atr_csum;
|
||||
unsigned char atr_len_retry;
|
||||
unsigned short atr_len;
|
||||
@@ -140,12 +141,10 @@ struct cm4000_dev {
|
||||
|
||||
struct timer_list timer; /* used to keep monitor running */
|
||||
int monitor_running;
|
||||
);
|
||||
};
|
||||
|
||||
#define ZERO_DEV(dev) \
|
||||
memset(&dev->atr_csum,0, \
|
||||
sizeof(struct cm4000_dev) - \
|
||||
offsetof(struct cm4000_dev, atr_csum))
|
||||
#define ZERO_DEV(dev) memset(&((dev)->init), 0, sizeof((dev)->init))
|
||||
|
||||
static struct pcmcia_device *dev_table[CM4000_MAX_DEV];
|
||||
static struct class *cmm_class;
|
||||
|
||||
@@ -222,8 +222,10 @@ struct chcr_authenc_ctx {
|
||||
};
|
||||
|
||||
struct __aead_ctx {
|
||||
struct chcr_gcm_ctx gcm[0];
|
||||
struct chcr_authenc_ctx authenc[];
|
||||
union {
|
||||
DECLARE_FLEX_ARRAY(struct chcr_gcm_ctx, gcm);
|
||||
DECLARE_FLEX_ARRAY(struct chcr_authenc_ctx, authenc);
|
||||
};
|
||||
};
|
||||
|
||||
struct chcr_aead_ctx {
|
||||
@@ -245,9 +247,11 @@ struct hmac_ctx {
|
||||
};
|
||||
|
||||
struct __crypto_ctx {
|
||||
struct hmac_ctx hmacctx[0];
|
||||
struct ablk_ctx ablkctx[0];
|
||||
struct chcr_aead_ctx aeadctx[];
|
||||
union {
|
||||
DECLARE_FLEX_ARRAY(struct hmac_ctx, hmacctx);
|
||||
DECLARE_FLEX_ARRAY(struct ablk_ctx, ablkctx);
|
||||
DECLARE_FLEX_ARRAY(struct chcr_aead_ctx, aeadctx);
|
||||
};
|
||||
};
|
||||
|
||||
struct chcr_context {
|
||||
|
||||
@@ -75,52 +75,27 @@ static inline int cxl_hdm_decoder_count(u32 cap_hdr)
|
||||
#define CXLDEV_MBOX_BG_CMD_STATUS_OFFSET 0x18
|
||||
#define CXLDEV_MBOX_PAYLOAD_OFFSET 0x20
|
||||
|
||||
#define CXL_COMPONENT_REGS() \
|
||||
void __iomem *hdm_decoder
|
||||
|
||||
#define CXL_DEVICE_REGS() \
|
||||
void __iomem *status; \
|
||||
void __iomem *mbox; \
|
||||
void __iomem *memdev
|
||||
|
||||
/* See note for 'struct cxl_regs' for the rationale of this organization */
|
||||
/*
|
||||
* CXL_COMPONENT_REGS - Common set of CXL Component register block base pointers
|
||||
* @hdm_decoder: CXL 2.0 8.2.5.12 CXL HDM Decoder Capability Structure
|
||||
*/
|
||||
struct cxl_component_regs {
|
||||
CXL_COMPONENT_REGS();
|
||||
};
|
||||
|
||||
/* See note for 'struct cxl_regs' for the rationale of this organization */
|
||||
/*
|
||||
* CXL_DEVICE_REGS - Common set of CXL Device register block base pointers
|
||||
* @status: CXL 2.0 8.2.8.3 Device Status Registers
|
||||
* @mbox: CXL 2.0 8.2.8.4 Mailbox Registers
|
||||
* @memdev: CXL 2.0 8.2.8.5 Memory Device Registers
|
||||
*/
|
||||
struct cxl_device_regs {
|
||||
CXL_DEVICE_REGS();
|
||||
};
|
||||
|
||||
/*
|
||||
* Note, the anonymous union organization allows for per
|
||||
* register-block-type helper routines, without requiring block-type
|
||||
* agnostic code to include the prefix.
|
||||
* Using struct_group() allows for per register-block-type helper routines,
|
||||
* without requiring block-type agnostic code to include the prefix.
|
||||
*/
|
||||
struct cxl_regs {
|
||||
union {
|
||||
struct {
|
||||
CXL_COMPONENT_REGS();
|
||||
};
|
||||
struct cxl_component_regs component;
|
||||
};
|
||||
union {
|
||||
struct {
|
||||
CXL_DEVICE_REGS();
|
||||
};
|
||||
struct cxl_device_regs device_regs;
|
||||
};
|
||||
/*
|
||||
* Common set of CXL Component register block base pointers
|
||||
* @hdm_decoder: CXL 2.0 8.2.5.12 CXL HDM Decoder Capability Structure
|
||||
*/
|
||||
struct_group_tagged(cxl_component_regs, component,
|
||||
void __iomem *hdm_decoder;
|
||||
);
|
||||
/*
|
||||
* Common set of CXL Device register block base pointers
|
||||
* @status: CXL 2.0 8.2.8.3 Device Status Registers
|
||||
* @mbox: CXL 2.0 8.2.8.4 Mailbox Registers
|
||||
* @memdev: CXL 2.0 8.2.8.5 Memory Device Registers
|
||||
*/
|
||||
struct_group_tagged(cxl_device_regs, device_regs,
|
||||
void __iomem *status, *mbox, *memdev;
|
||||
);
|
||||
};
|
||||
|
||||
struct cxl_reg_map {
|
||||
|
||||
@@ -38,16 +38,18 @@
|
||||
typedef struct drm32_mga_init {
|
||||
int func;
|
||||
u32 sarea_priv_offset;
|
||||
int chipset;
|
||||
int sgram;
|
||||
unsigned int maccess;
|
||||
unsigned int fb_cpp;
|
||||
unsigned int front_offset, front_pitch;
|
||||
unsigned int back_offset, back_pitch;
|
||||
unsigned int depth_cpp;
|
||||
unsigned int depth_offset, depth_pitch;
|
||||
unsigned int texture_offset[MGA_NR_TEX_HEAPS];
|
||||
unsigned int texture_size[MGA_NR_TEX_HEAPS];
|
||||
struct_group(always32bit,
|
||||
int chipset;
|
||||
int sgram;
|
||||
unsigned int maccess;
|
||||
unsigned int fb_cpp;
|
||||
unsigned int front_offset, front_pitch;
|
||||
unsigned int back_offset, back_pitch;
|
||||
unsigned int depth_cpp;
|
||||
unsigned int depth_offset, depth_pitch;
|
||||
unsigned int texture_offset[MGA_NR_TEX_HEAPS];
|
||||
unsigned int texture_size[MGA_NR_TEX_HEAPS];
|
||||
);
|
||||
u32 fb_offset;
|
||||
u32 mmio_offset;
|
||||
u32 status_offset;
|
||||
@@ -67,9 +69,8 @@ static int compat_mga_init(struct file *file, unsigned int cmd,
|
||||
|
||||
init.func = init32.func;
|
||||
init.sarea_priv_offset = init32.sarea_priv_offset;
|
||||
memcpy(&init.chipset, &init32.chipset,
|
||||
offsetof(drm_mga_init_t, fb_offset) -
|
||||
offsetof(drm_mga_init_t, chipset));
|
||||
memcpy(&init.always32bit, &init32.always32bit,
|
||||
sizeof(init32.always32bit));
|
||||
init.fb_offset = init32.fb_offset;
|
||||
init.mmio_offset = init32.mmio_offset;
|
||||
init.status_offset = init32.status_offset;
|
||||
|
||||
@@ -129,10 +129,12 @@ struct cp2112_xfer_status_report {
|
||||
|
||||
struct cp2112_string_report {
|
||||
u8 dummy; /* force .string to be aligned */
|
||||
u8 report; /* CP2112_*_STRING */
|
||||
u8 length; /* length in bytes of everyting after .report */
|
||||
u8 type; /* USB_DT_STRING */
|
||||
wchar_t string[30]; /* UTF16_LITTLE_ENDIAN string */
|
||||
struct_group_attr(contents, __packed,
|
||||
u8 report; /* CP2112_*_STRING */
|
||||
u8 length; /* length in bytes of everything after .report */
|
||||
u8 type; /* USB_DT_STRING */
|
||||
wchar_t string[30]; /* UTF16_LITTLE_ENDIAN string */
|
||||
);
|
||||
} __packed;
|
||||
|
||||
/* Number of times to request transfer status before giving up waiting for a
|
||||
@@ -986,8 +988,8 @@ static ssize_t pstr_show(struct device *kdev,
|
||||
u8 length;
|
||||
int ret;
|
||||
|
||||
ret = cp2112_hid_get(hdev, attr->report, &report.report,
|
||||
sizeof(report) - 1, HID_FEATURE_REPORT);
|
||||
ret = cp2112_hid_get(hdev, attr->report, (u8 *)&report.contents,
|
||||
sizeof(report.contents), HID_FEATURE_REPORT);
|
||||
if (ret < 3) {
|
||||
hid_err(hdev, "error reading %s string: %d\n", kattr->attr.name,
|
||||
ret);
|
||||
|
||||
@@ -857,7 +857,7 @@ static int kone_raw_event(struct hid_device *hdev, struct hid_report *report,
|
||||
memcpy(&kone->last_mouse_event, event,
|
||||
sizeof(struct kone_mouse_event));
|
||||
else
|
||||
memset(&event->tilt, 0, 5);
|
||||
memset(&event->wipe, 0, sizeof(event->wipe));
|
||||
|
||||
kone_keep_values_up_to_date(kone, event);
|
||||
|
||||
|
||||
@@ -152,11 +152,13 @@ struct kone_mouse_event {
|
||||
uint16_t x;
|
||||
uint16_t y;
|
||||
uint8_t wheel; /* up = 1, down = -1 */
|
||||
uint8_t tilt; /* right = 1, left = -1 */
|
||||
uint8_t unknown;
|
||||
uint8_t event;
|
||||
uint8_t value; /* press = 0, release = 1 */
|
||||
uint8_t macro_key; /* 0 to 8 */
|
||||
struct_group(wipe,
|
||||
uint8_t tilt; /* right = 1, left = -1 */
|
||||
uint8_t unknown;
|
||||
uint8_t event;
|
||||
uint8_t value; /* press = 0, release = 1 */
|
||||
uint8_t macro_key; /* 0 to 8 */
|
||||
);
|
||||
} __attribute__ ((__packed__));
|
||||
|
||||
enum kone_mouse_events {
|
||||
|
||||
@@ -121,8 +121,10 @@ struct ivhd_entry {
|
||||
u8 type;
|
||||
u16 devid;
|
||||
u8 flags;
|
||||
u32 ext;
|
||||
u32 hidh;
|
||||
struct_group(ext_hid,
|
||||
u32 ext;
|
||||
u32 hidh;
|
||||
);
|
||||
u64 cid;
|
||||
u8 uidf;
|
||||
u8 uidl;
|
||||
@@ -1377,7 +1379,8 @@ static int __init init_iommu_from_acpi(struct amd_iommu *iommu,
|
||||
break;
|
||||
}
|
||||
|
||||
memcpy(hid, (u8 *)(&e->ext), ACPIHID_HID_LEN - 1);
|
||||
BUILD_BUG_ON(sizeof(e->ext_hid) != ACPIHID_HID_LEN - 1);
|
||||
memcpy(hid, &e->ext_hid, ACPIHID_HID_LEN - 1);
|
||||
hid[ACPIHID_HID_LEN - 1] = '\0';
|
||||
|
||||
if (!(*hid)) {
|
||||
|
||||
@@ -848,7 +848,8 @@ int smu_queue_i2c(struct smu_i2c_cmd *cmd)
|
||||
cmd->read = cmd->info.devaddr & 0x01;
|
||||
switch(cmd->info.type) {
|
||||
case SMU_I2C_TRANSFER_SIMPLE:
|
||||
memset(&cmd->info.sublen, 0, 4);
|
||||
cmd->info.sublen = 0;
|
||||
memset(cmd->info.subaddr, 0, sizeof(cmd->info.subaddr));
|
||||
break;
|
||||
case SMU_I2C_TRANSFER_COMBINED:
|
||||
cmd->info.devaddr &= 0xfe;
|
||||
|
||||
@@ -290,31 +290,33 @@ struct flexcan_regs {
|
||||
u32 dbg1; /* 0x58 */
|
||||
u32 dbg2; /* 0x5c */
|
||||
u32 _reserved3[8]; /* 0x60 */
|
||||
u8 mb[2][512]; /* 0x80 - Not affected by Soft Reset */
|
||||
/* FIFO-mode:
|
||||
* MB
|
||||
* 0x080...0x08f 0 RX message buffer
|
||||
* 0x090...0x0df 1-5 reserved
|
||||
* 0x0e0...0x0ff 6-7 8 entry ID table
|
||||
* (mx25, mx28, mx35, mx53)
|
||||
* 0x0e0...0x2df 6-7..37 8..128 entry ID table
|
||||
* size conf'ed via ctrl2::RFFN
|
||||
* (mx6, vf610)
|
||||
*/
|
||||
u32 _reserved4[256]; /* 0x480 */
|
||||
u32 rximr[64]; /* 0x880 - Not affected by Soft Reset */
|
||||
u32 _reserved5[24]; /* 0x980 */
|
||||
u32 gfwr_mx6; /* 0x9e0 - MX6 */
|
||||
u32 _reserved6[39]; /* 0x9e4 */
|
||||
u32 _rxfir[6]; /* 0xa80 */
|
||||
u32 _reserved8[2]; /* 0xa98 */
|
||||
u32 _rxmgmask; /* 0xaa0 */
|
||||
u32 _rxfgmask; /* 0xaa4 */
|
||||
u32 _rx14mask; /* 0xaa8 */
|
||||
u32 _rx15mask; /* 0xaac */
|
||||
u32 tx_smb[4]; /* 0xab0 */
|
||||
u32 rx_smb0[4]; /* 0xac0 */
|
||||
u32 rx_smb1[4]; /* 0xad0 */
|
||||
struct_group(init,
|
||||
u8 mb[2][512]; /* 0x80 - Not affected by Soft Reset */
|
||||
/* FIFO-mode:
|
||||
* MB
|
||||
* 0x080...0x08f 0 RX message buffer
|
||||
* 0x090...0x0df 1-5 reserved
|
||||
* 0x0e0...0x0ff 6-7 8 entry ID table
|
||||
* (mx25, mx28, mx35, mx53)
|
||||
* 0x0e0...0x2df 6-7..37 8..128 entry ID table
|
||||
* size conf'ed via ctrl2::RFFN
|
||||
* (mx6, vf610)
|
||||
*/
|
||||
u32 _reserved4[256]; /* 0x480 */
|
||||
u32 rximr[64]; /* 0x880 - Not affected by Soft Reset */
|
||||
u32 _reserved5[24]; /* 0x980 */
|
||||
u32 gfwr_mx6; /* 0x9e0 - MX6 */
|
||||
u32 _reserved6[39]; /* 0x9e4 */
|
||||
u32 _rxfir[6]; /* 0xa80 */
|
||||
u32 _reserved8[2]; /* 0xa98 */
|
||||
u32 _rxmgmask; /* 0xaa0 */
|
||||
u32 _rxfgmask; /* 0xaa4 */
|
||||
u32 _rx14mask; /* 0xaa8 */
|
||||
u32 _rx15mask; /* 0xaac */
|
||||
u32 tx_smb[4]; /* 0xab0 */
|
||||
u32 rx_smb0[4]; /* 0xac0 */
|
||||
u32 rx_smb1[4]; /* 0xad0 */
|
||||
);
|
||||
u32 mecr; /* 0xae0 */
|
||||
u32 erriar; /* 0xae4 */
|
||||
u32 erridpr; /* 0xae8 */
|
||||
@@ -328,9 +330,11 @@ struct flexcan_regs {
|
||||
u32 fdcbt; /* 0xc04 - Not affected by Soft Reset */
|
||||
u32 fdcrc; /* 0xc08 */
|
||||
u32 _reserved9[199]; /* 0xc0c */
|
||||
u32 tx_smb_fd[18]; /* 0xf28 */
|
||||
u32 rx_smb0_fd[18]; /* 0xf70 */
|
||||
u32 rx_smb1_fd[18]; /* 0xfb8 */
|
||||
struct_group(init_fd,
|
||||
u32 tx_smb_fd[18]; /* 0xf28 */
|
||||
u32 rx_smb0_fd[18]; /* 0xf70 */
|
||||
u32 rx_smb1_fd[18]; /* 0xfb8 */
|
||||
);
|
||||
};
|
||||
|
||||
static_assert(sizeof(struct flexcan_regs) == 0x4 * 18 + 0xfb8);
|
||||
@@ -1400,14 +1404,10 @@ static void flexcan_ram_init(struct net_device *dev)
|
||||
reg_ctrl2 |= FLEXCAN_CTRL2_WRMFRZ;
|
||||
priv->write(reg_ctrl2, ®s->ctrl2);
|
||||
|
||||
memset_io(®s->mb[0][0], 0,
|
||||
offsetof(struct flexcan_regs, rx_smb1[3]) -
|
||||
offsetof(struct flexcan_regs, mb[0][0]) + 0x4);
|
||||
memset_io(®s->init, 0, sizeof(regs->init));
|
||||
|
||||
if (priv->can.ctrlmode & CAN_CTRLMODE_FD)
|
||||
memset_io(®s->tx_smb_fd[0], 0,
|
||||
offsetof(struct flexcan_regs, rx_smb1_fd[17]) -
|
||||
offsetof(struct flexcan_regs, tx_smb_fd[0]) + 0x4);
|
||||
memset_io(®s->init_fd, 0, sizeof(regs->init_fd));
|
||||
|
||||
reg_ctrl2 &= ~FLEXCAN_CTRL2_WRMFRZ;
|
||||
priv->write(reg_ctrl2, ®s->ctrl2);
|
||||
|
||||
@@ -192,7 +192,7 @@ struct es581_4_urb_cmd {
|
||||
struct es581_4_rx_cmd_ret rx_cmd_ret;
|
||||
__le64 timestamp;
|
||||
u8 rx_cmd_ret_u8;
|
||||
u8 raw_msg[0];
|
||||
DECLARE_FLEX_ARRAY(u8, raw_msg);
|
||||
} __packed;
|
||||
|
||||
__le16 reserved_for_crc16_do_not_use;
|
||||
|
||||
@@ -219,7 +219,7 @@ struct es58x_fd_urb_cmd {
|
||||
struct es58x_fd_tx_ack_msg tx_ack_msg;
|
||||
__le64 timestamp;
|
||||
__le32 rx_cmd_ret_le32;
|
||||
u8 raw_msg[0];
|
||||
DECLARE_FLEX_ARRAY(u8, raw_msg);
|
||||
} __packed;
|
||||
|
||||
__le16 reserved_for_crc16_do_not_use;
|
||||
|
||||
@@ -159,10 +159,10 @@ static int bnxt_hwrm_queue_cos2bw_qcfg(struct bnxt *bp, struct ieee_ets *ets)
|
||||
}
|
||||
|
||||
data = &resp->queue_id0 + offsetof(struct bnxt_cos2bw_cfg, queue_id);
|
||||
for (i = 0; i < bp->max_tc; i++, data += sizeof(cos2bw) - 4) {
|
||||
for (i = 0; i < bp->max_tc; i++, data += sizeof(cos2bw.cfg)) {
|
||||
int tc;
|
||||
|
||||
memcpy(&cos2bw.queue_id, data, sizeof(cos2bw) - 4);
|
||||
memcpy(&cos2bw.cfg, data, sizeof(cos2bw.cfg));
|
||||
if (i == 0)
|
||||
cos2bw.queue_id = resp->queue_id0;
|
||||
|
||||
|
||||
@@ -23,13 +23,15 @@ struct bnxt_dcb {
|
||||
|
||||
struct bnxt_cos2bw_cfg {
|
||||
u8 pad[3];
|
||||
u8 queue_id;
|
||||
__le32 min_bw;
|
||||
__le32 max_bw;
|
||||
struct_group_attr(cfg, __packed,
|
||||
u8 queue_id;
|
||||
__le32 min_bw;
|
||||
__le32 max_bw;
|
||||
#define BW_VALUE_UNIT_PERCENT1_100 (0x1UL << 29)
|
||||
u8 tsa;
|
||||
u8 pri_lvl;
|
||||
u8 bw_weight;
|
||||
u8 tsa;
|
||||
u8 pri_lvl;
|
||||
u8 bw_weight;
|
||||
);
|
||||
u8 unused;
|
||||
};
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user