diff options
Diffstat (limited to 'usr/src')
-rw-r--r-- | usr/src/head/stdalign.h | 23 | ||||
-rw-r--r-- | usr/src/lib/fm/libfmd_agent/common/fmd_agent.c | 6 | ||||
-rw-r--r-- | usr/src/lib/libdladm/Makefile.com | 2 | ||||
-rw-r--r-- | usr/src/lib/libdladm/common/libdladm.c | 2 | ||||
-rw-r--r-- | usr/src/lib/libdladm/common/libdlbridge.c | 2 | ||||
-rw-r--r-- | usr/src/lib/libdladm/common/libdlstat.c | 56 | ||||
-rw-r--r-- | usr/src/lib/libdladm/common/linkprop.c | 1 | ||||
-rw-r--r-- | usr/src/lib/smbsrv/libsmb/common/smb_domain.c | 2 | ||||
-rw-r--r-- | usr/src/test/libc-tests/cfg/symbols/stdalign_h.cfg | 8 | ||||
-rw-r--r-- | usr/src/test/test-runner/cmd/run | 3 | ||||
-rw-r--r-- | usr/src/uts/common/fs/smbsrv/smb_cmn_setfile.c | 16 | ||||
-rw-r--r-- | usr/src/uts/common/fs/smbsrv/smb_common_open.c | 6 |
12 files changed, 76 insertions, 51 deletions
diff --git a/usr/src/head/stdalign.h b/usr/src/head/stdalign.h index 2577a8de92..15160d660e 100644 --- a/usr/src/head/stdalign.h +++ b/usr/src/head/stdalign.h @@ -11,30 +11,43 @@ /* * Copyright 2016 Joyent, Inc. + * Copyright 2022 Oxide Computer Company */ #ifndef _STDALIGN_H #define _STDALIGN_H /* - * ISO/IEC C11 stdalign.h + * ISO/IEC C11 stdalign.h. This header is meant to provide definitions for the + * alignas and alignof 'keywords' into the underlying compiler-understood value. + * In addition, there are two macros that are meant to define that this process + * has happened. C++11 added alignas/alignof as keywords and including this + * header is meant to cause us to still have the _is_defined macros, but not + * define this overall. + * + * Unlike other cases we don't use any symbol guards here (other than C++) and + * just allow the implementation to either have _Alignas and _Alignof or not + * have it and lead to a compiler error for the user. The main justification of + * this is that this header is only defined in C11 (and newer). It's not defined + * in other standards and just as if you include a non-standard header, in this + * case we don't try to stop that (same as if you included something like + * libdevinfo.h). */ -#include <sys/feature_tests.h> #ifdef __cplusplus extern "C" { #endif -#if !defined(_STRICT_SYMBOLS) || defined(_STDC_C11) +#ifndef __cplusplus #define alignas _Alignas #define alignof _Alignof +#endif /* !__cplusplus */ + #define __alignas_is_defined 1 #define __alignof_is_defined 1 -#endif /* !_STRICT_SYMBOLS || _STDC_C11 */ - #ifdef __cplusplus } #endif diff --git a/usr/src/lib/fm/libfmd_agent/common/fmd_agent.c b/usr/src/lib/fm/libfmd_agent/common/fmd_agent.c index 928978fa17..62ec7cc331 100644 --- a/usr/src/lib/fm/libfmd_agent/common/fmd_agent.c +++ b/usr/src/lib/fm/libfmd_agent/common/fmd_agent.c @@ -129,12 +129,8 @@ fmd_agent_nvl_ioctl(fmd_agent_hdl_t *hdl, int cmd, uint32_t ver, if (errno == ENAMETOOLONG && outsz != 0 && outsz < (FM_IOC_OUT_MAXBUFSZ / 2)) { umem_free(outbuf, outsz); + outbuf = NULL; outsz *= 2; - outbuf = umem_alloc(outsz, UMEM_DEFAULT); - if (outbuf == NULL) { - err = errno; - break; - } } else { err = errno; break; diff --git a/usr/src/lib/libdladm/Makefile.com b/usr/src/lib/libdladm/Makefile.com index 72f5a06d0f..49c4d3c36f 100644 --- a/usr/src/lib/libdladm/Makefile.com +++ b/usr/src/lib/libdladm/Makefile.com @@ -43,8 +43,6 @@ LDLIBS += -ldevinfo -lc -linetutil -lsocket -lscf -lrcm -lnvpair \ SRCDIR = ../common CFLAGS += $(CCVERBOSE) -CERRWARN += -_gcc=-Wno-parentheses -CERRWARN += -_gcc=-Wno-unused-label CERRWARN += $(CNOWARN_UNINIT) CPPFLAGS += -I$(SRCDIR) -D_REENTRANT diff --git a/usr/src/lib/libdladm/common/libdladm.c b/usr/src/lib/libdladm/common/libdladm.c index eec92e09ba..d0600d64f5 100644 --- a/usr/src/lib/libdladm/common/libdladm.c +++ b/usr/src/lib/libdladm/common/libdladm.c @@ -1182,7 +1182,7 @@ dladm_strs2range(char **prop_val, uint_t val_cnt, if (*endp++ != '-') return (DLADM_STATUS_BADRANGE); ur->mpur_max = strtol(endp, &endp, 10); - if (endp != NULL && *endp != '\0' || + if ((endp != NULL && *endp != '\0') || ur->mpur_max < ur->mpur_min) return (DLADM_STATUS_BADRANGE); } diff --git a/usr/src/lib/libdladm/common/libdlbridge.c b/usr/src/lib/libdladm/common/libdlbridge.c index aaf2fede13..1c759aa98b 100644 --- a/usr/src/lib/libdladm/common/libdlbridge.c +++ b/usr/src/lib/libdladm/common/libdlbridge.c @@ -933,7 +933,7 @@ dladm_bridge_configure(dladm_handle_t handle, const char *name, if ((tran = scf_transaction_create(sstate.ss_handle)) == NULL) goto out; - if (cfg->field_mask & BR_CFG_ALL) { + if (cfg->field_mask & (BR_CFG_ALL)) { if ((sstate.ss_pg = scf_pg_create(sstate.ss_handle)) == NULL) goto out; if (scf_instance_add_pg(sstate.ss_inst, "config", diff --git a/usr/src/lib/libdladm/common/libdlstat.c b/usr/src/lib/libdladm/common/libdlstat.c index 9f7625f9b2..11a36b2173 100644 --- a/usr/src/lib/libdladm/common/libdlstat.c +++ b/usr/src/lib/libdladm/common/libdlstat.c @@ -54,7 +54,7 @@ struct flowlist { uint64_t ifspeed; boolean_t first; boolean_t display; - pktsum_t prevstats; + pktsum_t prevstats; pktsum_t diffstats; }; @@ -175,7 +175,7 @@ dladm_get_single_mac_stat(dladm_handle_t handle, datalink_id_t linkid, { char module[DLPI_LINKNAME_MAX]; uint_t instance; - char link[DLPI_LINKNAME_MAX]; + char link[DLPI_LINKNAME_MAX]; dladm_status_t status; uint32_t flags, media; kstat_t *ksp; @@ -283,8 +283,8 @@ static stat_info_t rx_hwlane_stats_list[] = { {"pollbytes", RL_OFF(rl_pollbytes)}, {"rxsdrops", RL_OFF(rl_sdrops)}, {"chainunder10", RL_OFF(rl_chl10)}, - {"chain10to50", RL_OFF(rl_ch10_50)}, - {"chainover50", RL_OFF(rl_chg50)} + {"chain10to50", RL_OFF(rl_ch10_50)}, + {"chainover50", RL_OFF(rl_chg50)} }; #define RX_HWLANE_STAT_SIZE A_CNT(rx_hwlane_stats_list) @@ -310,8 +310,8 @@ static stat_info_t rx_lane_stats_list[] = { {"rxsdrops", RL_OFF(rl_sdrops)}, {"pollbytes", RL_OFF(rl_pollbytes)}, {"chainunder10", RL_OFF(rl_chl10)}, - {"chain10to50", RL_OFF(rl_ch10_50)}, - {"chainover50", RL_OFF(rl_chg50)} + {"chain10to50", RL_OFF(rl_ch10_50)}, + {"chainover50", RL_OFF(rl_chg50)} }; #define RX_LANE_STAT_SIZE A_CNT(rx_lane_stats_list) @@ -710,7 +710,7 @@ typedef enum { void dladm_sort_index_list(uint_t idlist[], uint_t size) { - int i, j; + int i, j; for (j = 1; j < size; j++) { int key = idlist[j]; @@ -929,8 +929,8 @@ i_dlstat_query_stats(dladm_handle_t handle, const char *modname, { kstat_t *ksp; char statname[MAXLINKNAMELEN]; - int i = 0; - dladm_stat_chain_t *head = NULL, *prev = NULL; + int i = 0; + dladm_stat_chain_t *head = NULL, *prev = NULL; dladm_stat_chain_t *curr; if (dladm_dld_kcp(handle) == NULL) { @@ -939,7 +939,7 @@ i_dlstat_query_stats(dladm_handle_t handle, const char *modname, } for (i = 0; i < idlist_size; i++) { - uint_t index = idlist[i]; + uint_t index = idlist[i]; (void) snprintf(statname, sizeof (statname), "%s%d", prefix, index); @@ -970,7 +970,6 @@ i_dlstat_query_stats(dladm_handle_t handle, const char *modname, prev = curr; } -done: return (head); } @@ -978,7 +977,7 @@ static misc_stat_entry_t * i_dlstat_misc_stats(dladm_handle_t handle, const char *linkname) { kstat_t *ksp; - misc_stat_entry_t *misc_stat_entry = NULL; + misc_stat_entry_t *misc_stat_entry = NULL; if (dladm_dld_kcp(handle) == NULL) return (NULL); @@ -1240,11 +1239,11 @@ void * dlstat_rx_lane_stats(dladm_handle_t dh, datalink_id_t linkid) { dladm_stat_chain_t *head = NULL; - dladm_stat_chain_t *local_stats = NULL; - dladm_stat_chain_t *bcast_stats = NULL; - dladm_stat_chain_t *defunctlane_stats = NULL; - dladm_stat_chain_t *lane_stats = NULL; - char linkname[MAXLINKNAMELEN]; + dladm_stat_chain_t *local_stats = NULL; + dladm_stat_chain_t *bcast_stats = NULL; + dladm_stat_chain_t *defunctlane_stats = NULL; + dladm_stat_chain_t *lane_stats = NULL; + char linkname[MAXLINKNAMELEN]; boolean_t is_legacy_driver; if (dladm_datalink_id2info(dh, linkid, NULL, NULL, NULL, linkname, @@ -1454,10 +1453,10 @@ void * dlstat_tx_lane_stats(dladm_handle_t dh, datalink_id_t linkid) { dladm_stat_chain_t *head = NULL; - dladm_stat_chain_t *bcast_stats = NULL; - dladm_stat_chain_t *defunctlane_stats = NULL; - dladm_stat_chain_t *lane_stats; - char linkname[MAXLINKNAMELEN]; + dladm_stat_chain_t *bcast_stats = NULL; + dladm_stat_chain_t *defunctlane_stats = NULL; + dladm_stat_chain_t *lane_stats; + char linkname[MAXLINKNAMELEN]; boolean_t is_legacy_driver; if (dladm_datalink_id2info(dh, linkid, NULL, NULL, NULL, linkname, @@ -1643,8 +1642,8 @@ i_dlstat_query_fanout_stats(dladm_handle_t dh, datalink_id_t linkid, char linkname[MAXLINKNAMELEN]; dladm_stat_chain_t *curr, *curr_head; dladm_stat_chain_t *head = NULL, *prev = NULL; - uint_t fanout_idlist[MAX_RINGS_PER_GROUP]; - uint_t fanout_idlist_size; + uint_t fanout_idlist[MAX_RINGS_PER_GROUP]; + uint_t fanout_idlist_size; if (dladm_datalink_id2info(dh, linkid, NULL, NULL, NULL, linkname, DLPI_LINKNAME_MAX) != DLADM_STATUS_OK) { @@ -1720,7 +1719,7 @@ dlstat_fanout_stats(dladm_handle_t dh, datalink_id_t linkid) dladm_stat_chain_t *fout_hwlane_stats; dladm_stat_chain_t *fout_swlane_and_local_stats; fanout_stat_entry_t *fout_stats; - char linkname[MAXLINKNAMELEN]; + char linkname[MAXLINKNAMELEN]; if (dladm_datalink_id2info(dh, linkid, NULL, NULL, NULL, linkname, DLPI_LINKNAME_MAX) != DLADM_STATUS_OK) { @@ -1766,9 +1765,9 @@ i_dlstat_rx_ring_match(void *arg1, void *arg2) static void * i_dlstat_rx_ring_stat_entry_diff(void *arg1, void *arg2) { - ring_stat_entry_t *s1 = arg1; - ring_stat_entry_t *s2 = arg2; - ring_stat_entry_t *diff_entry; + ring_stat_entry_t *s1 = arg1; + ring_stat_entry_t *s2 = arg2; + ring_stat_entry_t *diff_entry; diff_entry = malloc(sizeof (ring_stat_entry_t)); if (diff_entry == NULL) @@ -2272,7 +2271,7 @@ dlstat_misc_stats(dladm_handle_t dh, datalink_id_t linkid) { misc_stat_entry_t *misc_stat_entry; dladm_stat_chain_t *head = NULL; - char linkname[MAXLINKNAMELEN]; + char linkname[MAXLINKNAMELEN]; if (dladm_datalink_id2info(dh, linkid, NULL, NULL, NULL, linkname, DLPI_LINKNAME_MAX) != DLADM_STATUS_OK) { @@ -2461,7 +2460,6 @@ i_walk_dlstat_chain(dladm_stat_chain_t *stat_head, dladm_stat_type_t stattype) nvstat_prev = nvstat_curr; } -done: return (nvstat_head); } diff --git a/usr/src/lib/libdladm/common/linkprop.c b/usr/src/lib/libdladm/common/linkprop.c index 3e6e8e0912..0544a880ca 100644 --- a/usr/src/lib/libdladm/common/linkprop.c +++ b/usr/src/lib/libdladm/common/linkprop.c @@ -3995,7 +3995,6 @@ set_public_prop(dladm_handle_t handle, prop_desc_t *pdp, status = i_dladm_macprop(handle, dip, B_TRUE); -done: free(dip); return (status); } diff --git a/usr/src/lib/smbsrv/libsmb/common/smb_domain.c b/usr/src/lib/smbsrv/libsmb/common/smb_domain.c index 5b4a15a08f..e1c5109871 100644 --- a/usr/src/lib/smbsrv/libsmb/common/smb_domain.c +++ b/usr/src/lib/smbsrv/libsmb/common/smb_domain.c @@ -144,7 +144,7 @@ smb_domain_add(smb_domain_type_t type, smb_domain_t *di) { uint32_t res; - if ((di == NULL) || (di->di_sid == NULL)) + if (di == NULL || di->di_sid[0] == '\0') return (SMB_DOMAIN_INVALID_ARG); if ((res = smb_dcache_lock(SMB_DCACHE_WRLOCK)) == SMB_DOMAIN_SUCCESS) { diff --git a/usr/src/test/libc-tests/cfg/symbols/stdalign_h.cfg b/usr/src/test/libc-tests/cfg/symbols/stdalign_h.cfg index 81b7419e31..aa2c517bb6 100644 --- a/usr/src/test/libc-tests/cfg/symbols/stdalign_h.cfg +++ b/usr/src/test/libc-tests/cfg/symbols/stdalign_h.cfg @@ -20,7 +20,7 @@ # # Defines # -define | alignas | | stdalign.h | -ALL +C11 -define | alignof | | stdalign.h | -ALL +C11 -define | __alignas_is_defined | 1 | stdalign.h | -ALL +C11 -define | __alignof_is_defined | 1 | stdalign.h | -ALL +C11 +define | alignas | | stdalign.h | +ALL +define | alignof | | stdalign.h | +ALL +define | __alignas_is_defined | 1 | stdalign.h | +ALL +define | __alignof_is_defined | 1 | stdalign.h | +ALL diff --git a/usr/src/test/test-runner/cmd/run b/usr/src/test/test-runner/cmd/run index 189be04d4d..ce1bf1419c 100644 --- a/usr/src/test/test-runner/cmd/run +++ b/usr/src/test/test-runner/cmd/run @@ -973,6 +973,9 @@ def filter_tests(testrun, options): if not m: continue group, test = m.group(1, 2) + m = re.match(re.escape(options.testdir) + r'(.*)', group) + if m: + group = m.group(1) try: failed[group].append(test) except KeyError: diff --git a/usr/src/uts/common/fs/smbsrv/smb_cmn_setfile.c b/usr/src/uts/common/fs/smbsrv/smb_cmn_setfile.c index 1b9ed07060..c5369eae4f 100644 --- a/usr/src/uts/common/fs/smbsrv/smb_cmn_setfile.c +++ b/usr/src/uts/common/fs/smbsrv/smb_cmn_setfile.c @@ -231,8 +231,9 @@ smb_set_alloc_info(smb_request_t *sr, smb_setinfo_t *si) uint32_t smb_set_disposition_info(smb_request_t *sr, smb_setinfo_t *si) { - smb_node_t *node = si->si_node; - smb_ofile_t *of = sr->fid_ofile; + smb_attr_t *attr = &si->si_attr; + smb_node_t *node = si->si_node; + smb_ofile_t *of = sr->fid_ofile; uint8_t mark_delete; uint32_t status; uint32_t flags = 0; @@ -249,6 +250,17 @@ smb_set_disposition_info(smb_request_t *sr, smb_setinfo_t *si) } /* + * MS-FSA 2.1.5.14.3 FileDispositionInformation + * If dosattr READONLY, STATUS_CANNOT_DELETE. + */ + attr->sa_mask = SMB_AT_DOSATTR; + status = smb2_ofile_getattr(sr, of, attr); + if (status != 0) + return (status); + if ((attr->sa_dosattr & FILE_ATTRIBUTE_READONLY) != 0) + return (NT_STATUS_CANNOT_DELETE); + + /* * Break any oplock handle caching. */ status = smb_oplock_break_SETINFO(node, of, diff --git a/usr/src/uts/common/fs/smbsrv/smb_common_open.c b/usr/src/uts/common/fs/smbsrv/smb_common_open.c index 688bac53d8..894affa2a5 100644 --- a/usr/src/uts/common/fs/smbsrv/smb_common_open.c +++ b/usr/src/uts/common/fs/smbsrv/smb_common_open.c @@ -945,6 +945,12 @@ create: goto errout; } + if ((op->dattr & FILE_ATTRIBUTE_READONLY) != 0 && + (op->create_options & FILE_DELETE_ON_CLOSE) != 0) { + status = NT_STATUS_CANNOT_DELETE; + goto errout; + } + if ((op->desired_access & ACCESS_SYSTEM_SECURITY) != 0 && !smb_user_has_security_priv(sr->uid_user, sr->user_cr)) { status = NT_STATUS_ACCESS_DENIED; |