Compare commits
No commits in common. 'c9' and 'i10cs' have entirely different histories.
@ -1 +1 @@
|
||||
SOURCES/smartmontools-7.2.tar.gz
|
||||
SOURCES/smartmontools-7.4.tar.gz
|
||||
|
@ -1 +1 @@
|
||||
8d68241096f6ed5b1bbcd8b427fa4a881c1f3e33 SOURCES/smartmontools-7.2.tar.gz
|
||||
b0d7c9ca80768059607b92bf4e373e2822300d3f SOURCES/smartmontools-7.4.tar.gz
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,11 @@
|
||||
/etc/rc\.d/init\.d/(smartd|smartmontools) -- gen_context(system_u:object_r:fsdaemon_initrc_exec_t,s0)
|
||||
|
||||
/usr/sbin/smartd -- gen_context(system_u:object_r:fsdaemon_exec_t,s0)
|
||||
|
||||
/var/run/smartd\.pid -- gen_context(system_u:object_r:fsdaemon_var_run_t,s0)
|
||||
|
||||
/var/lib/smartmontools(/.*)? gen_context(system_u:object_r:fsdaemon_var_lib_t,s0)
|
||||
|
||||
/etc/smartmontools/smartd_warning.(sh|d/.*) gen_context(system_u:object_r:smartdwarn_script_t,s0)
|
||||
/usr/libexec/smartmontools/smartdnotify -- gen_context(system_u:object_r:smartdwarn_script_t,s0)
|
||||
|
@ -0,0 +1,68 @@
|
||||
## <summary>Smart disk monitoring daemon.</summary>
|
||||
|
||||
#######################################
|
||||
## <summary>
|
||||
## Read smartmon temporary files.
|
||||
## </summary>
|
||||
## <param name="domain">
|
||||
## <summary>
|
||||
## Domain allowed access.
|
||||
## </summary>
|
||||
## </param>
|
||||
#
|
||||
interface(`smartmon_read_tmp_files',`
|
||||
gen_require(`
|
||||
type fsdaemon_tmp_t;
|
||||
')
|
||||
|
||||
files_search_tmp($1)
|
||||
allow $1 fsdaemon_tmp_t:file read_file_perms;
|
||||
')
|
||||
|
||||
########################################
|
||||
## <summary>
|
||||
## All of the rules required to
|
||||
## administrate an smartmon environment.
|
||||
## </summary>
|
||||
## <param name="domain">
|
||||
## <summary>
|
||||
## Domain allowed access.
|
||||
## </summary>
|
||||
## </param>
|
||||
## <param name="role">
|
||||
## <summary>
|
||||
## Role allowed access.
|
||||
## </summary>
|
||||
## </param>
|
||||
## <rolecap/>
|
||||
#
|
||||
interface(`smartmon_admin',`
|
||||
gen_require(`
|
||||
type fsdaemon_t, fsdaemon_tmp_t, fsdaemon_var_run_t;
|
||||
type fsdaemon_var_lib_t, fsdaemon_initrc_exec_t;
|
||||
type smartdwarn_t, smartdwarn_script_t;
|
||||
')
|
||||
|
||||
allow $1 fsdaemon_t:process signal_perms;
|
||||
ps_process_pattern($1, fsdaemon_t)
|
||||
|
||||
tunable_policy(`deny_ptrace',`',`
|
||||
allow $1 fsdaemon_t:process ptrace;
|
||||
')
|
||||
|
||||
init_labeled_script_domtrans($1, fsdaemon_initrc_exec_t)
|
||||
domain_system_change_exemption($1)
|
||||
role_transition $2 fsdaemon_initrc_exec_t system_r;
|
||||
allow $2 system_r;
|
||||
|
||||
admin_pattern($1, smartdwarn_script_t)
|
||||
|
||||
files_list_tmp($1)
|
||||
admin_pattern($1, fsdaemon_tmp_t)
|
||||
|
||||
files_list_pids($1)
|
||||
admin_pattern($1, fsdaemon_var_run_t)
|
||||
|
||||
files_list_var_lib($1)
|
||||
admin_pattern($1, fsdaemon_var_lib_t)
|
||||
')
|
@ -0,0 +1,195 @@
|
||||
policy_module(smartmon, 1.13.0)
|
||||
|
||||
########################################
|
||||
#
|
||||
# Declarations
|
||||
#
|
||||
|
||||
## <desc>
|
||||
## <p>
|
||||
## Determine whether smartmon can support
|
||||
## devices on 3ware controllers.
|
||||
## </p>
|
||||
## </desc>
|
||||
gen_tunable(smartmon_3ware, false)
|
||||
|
||||
require {
|
||||
class capability dac_override;
|
||||
type tty_device_t, user_devpts_t, system_mail_t;
|
||||
}
|
||||
|
||||
type fsdaemon_t;
|
||||
type fsdaemon_exec_t;
|
||||
init_daemon_domain(fsdaemon_t, fsdaemon_exec_t)
|
||||
|
||||
type fsdaemon_initrc_exec_t;
|
||||
init_script_file(fsdaemon_initrc_exec_t)
|
||||
|
||||
# runs smartd_warning.sh and smartd_warning.d/*
|
||||
type smartdwarn_t;
|
||||
type smartdwarn_script_t;
|
||||
type_transition fsdaemon_t smartdwarn_script_t:process smartdwarn_t;
|
||||
role system_r types smartdwarn_t;
|
||||
|
||||
files_type(smartdwarn_script_t)
|
||||
|
||||
application_domain(smartdwarn_t, smartdwarn_script_t)
|
||||
domtrans_pattern(fsdaemon_t, smartdwarn_script_t, smartdwarn_t)
|
||||
|
||||
corecmd_exec_bin(smartdwarn_t)
|
||||
corecmd_exec_shell(smartdwarn_t)
|
||||
|
||||
# reads list of users
|
||||
auth_read_passwd_file(smartdwarn_t)
|
||||
|
||||
hostname_domtrans(smartdwarn_t)
|
||||
|
||||
# smartd_warning.sh to run smartd_warning.d/* scripts
|
||||
allow smartdwarn_t smartdwarn_script_t:file execute_no_trans;
|
||||
|
||||
# for wall cmd
|
||||
init_read_utmp(smartdwarn_t)
|
||||
allow smartdwarn_t tty_device_t:chr_file { open write };
|
||||
allow smartdwarn_t user_devpts_t:chr_file { open write };
|
||||
allow smartdwarn_t self:capability { setgid dac_override };
|
||||
files_manage_generic_tmp_files(smartdwarn_t)
|
||||
term_open_unallocated_ttys(smartdwarn_t)
|
||||
term_search_ptys(smartdwarn_t)
|
||||
userdom_use_user_terminals(smartdwarn_t)
|
||||
|
||||
|
||||
optional_policy(`
|
||||
systemd_exec_systemctl(smartdwarn_t)
|
||||
')
|
||||
|
||||
optional_policy(`
|
||||
mta_send_mail(smartdwarn_t)
|
||||
mta_manage_home_rw(smartdwarn_t)
|
||||
')
|
||||
|
||||
# optional_policy(`
|
||||
# unconfined_domain(smartdwarn_t)
|
||||
# ')
|
||||
|
||||
|
||||
type fsdaemon_var_run_t;
|
||||
files_pid_file(fsdaemon_var_run_t)
|
||||
|
||||
type fsdaemon_var_lib_t;
|
||||
files_type(fsdaemon_var_lib_t)
|
||||
|
||||
type fsdaemon_tmp_t;
|
||||
files_tmp_file(fsdaemon_tmp_t)
|
||||
|
||||
ifdef(`enable_mls',`
|
||||
init_ranged_daemon_domain(fsdaemon_t, fsdaemon_exec_t, mls_systemhigh)
|
||||
')
|
||||
|
||||
########################################
|
||||
#
|
||||
# Local policy
|
||||
#
|
||||
|
||||
allow fsdaemon_t self:capability { dac_read_search dac_override kill setpcap setgid sys_rawio sys_admin };
|
||||
dontaudit fsdaemon_t self:capability sys_tty_config;
|
||||
allow fsdaemon_t self:process { getcap setcap signal_perms };
|
||||
allow fsdaemon_t self:fifo_file rw_fifo_file_perms;
|
||||
allow fsdaemon_t self:unix_stream_socket { accept listen };
|
||||
|
||||
manage_dirs_pattern(fsdaemon_t, fsdaemon_tmp_t, fsdaemon_tmp_t)
|
||||
manage_files_pattern(fsdaemon_t, fsdaemon_tmp_t, fsdaemon_tmp_t)
|
||||
files_tmp_filetrans(fsdaemon_t, fsdaemon_tmp_t, { file dir })
|
||||
|
||||
manage_files_pattern(fsdaemon_t, fsdaemon_var_run_t, fsdaemon_var_run_t)
|
||||
files_pid_filetrans(fsdaemon_t, fsdaemon_var_run_t, file)
|
||||
|
||||
manage_dirs_pattern(fsdaemon_t, fsdaemon_var_lib_t, fsdaemon_var_lib_t)
|
||||
manage_files_pattern(fsdaemon_t, fsdaemon_var_lib_t, fsdaemon_var_lib_t)
|
||||
files_var_lib_filetrans(fsdaemon_t, fsdaemon_var_lib_t, { dir file })
|
||||
|
||||
kernel_read_kernel_sysctls(fsdaemon_t)
|
||||
kernel_read_network_state(fsdaemon_t)
|
||||
kernel_read_software_raid_state(fsdaemon_t)
|
||||
kernel_read_system_state(fsdaemon_t)
|
||||
|
||||
auth_use_nsswitch(fsdaemon_t)
|
||||
|
||||
corecmd_exec_all_executables(fsdaemon_t)
|
||||
|
||||
corenet_all_recvfrom_netlabel(fsdaemon_t)
|
||||
corenet_udp_sendrecv_generic_if(fsdaemon_t)
|
||||
corenet_udp_sendrecv_generic_node(fsdaemon_t)
|
||||
corenet_udp_sendrecv_all_ports(fsdaemon_t)
|
||||
|
||||
dev_read_sysfs(fsdaemon_t)
|
||||
dev_read_urand(fsdaemon_t)
|
||||
|
||||
domain_use_interactive_fds(fsdaemon_t)
|
||||
|
||||
files_exec_etc_files(fsdaemon_t)
|
||||
files_read_etc_runtime_files(fsdaemon_t)
|
||||
|
||||
fs_getattr_all_fs(fsdaemon_t)
|
||||
fs_search_auto_mountpoints(fsdaemon_t)
|
||||
fs_read_removable_files(fsdaemon_t)
|
||||
|
||||
mls_file_read_all_levels(fsdaemon_t)
|
||||
|
||||
storage_create_fixed_disk_dev(fsdaemon_t)
|
||||
storage_dev_filetrans_named_fixed_disk(fsdaemon_t)
|
||||
storage_raw_read_fixed_disk(fsdaemon_t)
|
||||
storage_raw_write_fixed_disk(fsdaemon_t)
|
||||
storage_raw_read_removable_device(fsdaemon_t)
|
||||
storage_read_scsi_generic(fsdaemon_t)
|
||||
storage_write_scsi_generic(fsdaemon_t)
|
||||
|
||||
term_dontaudit_search_ptys(fsdaemon_t)
|
||||
|
||||
domain_signull_all_domains(fsdaemon_t)
|
||||
|
||||
auth_read_passwd(fsdaemon_t)
|
||||
|
||||
init_read_utmp(fsdaemon_t)
|
||||
|
||||
libs_exec_ld_so(fsdaemon_t)
|
||||
libs_exec_lib_files(fsdaemon_t)
|
||||
|
||||
logging_send_syslog_msg(fsdaemon_t)
|
||||
|
||||
seutil_sigchld_newrole(fsdaemon_t)
|
||||
|
||||
sysnet_dns_name_resolve(fsdaemon_t)
|
||||
|
||||
userdom_dontaudit_use_unpriv_user_fds(fsdaemon_t)
|
||||
userdom_dontaudit_search_user_home_dirs(fsdaemon_t)
|
||||
userdom_dontaudit_manage_admin_dir(fsdaemon_t)
|
||||
userdom_use_user_terminals(fsdaemon_t)
|
||||
|
||||
tunable_policy(`smartmon_3ware',`
|
||||
allow fsdaemon_t self:process setfscreate;
|
||||
|
||||
storage_create_fixed_disk_dev(fsdaemon_t)
|
||||
storage_delete_fixed_disk_dev(fsdaemon_t)
|
||||
storage_dev_filetrans_fixed_disk(fsdaemon_t)
|
||||
|
||||
selinux_validate_context(fsdaemon_t)
|
||||
|
||||
seutil_read_file_contexts(fsdaemon_t)
|
||||
')
|
||||
|
||||
# this should be no longer needed with smartdwarn_t
|
||||
# optional_policy(`
|
||||
# mta_send_mail(fsdaemon_t)
|
||||
# mta_manage_home_rw(fsdaemon_t)
|
||||
# ')
|
||||
# still creator of the pipe (stdout, stderr) for smartd_warning and mail
|
||||
allow system_mail_t fsdaemon_t:fifo_file { getattr read write append ioctl lock };
|
||||
|
||||
|
||||
optional_policy(`
|
||||
udev_read_db(fsdaemon_t)
|
||||
')
|
||||
|
||||
optional_policy(`
|
||||
virt_read_images(fsdaemon_t)
|
||||
')
|
@ -1,32 +0,0 @@
|
||||
diff -up smartmontools-7.2/smartd.cpp.capnotify smartmontools-7.2/smartd.cpp
|
||||
--- smartmontools-7.2/smartd.cpp.capnotify 2020-11-23 19:25:16.000000000 +0100
|
||||
+++ smartmontools-7.2/smartd.cpp 2021-06-16 12:06:03.985526022 +0200
|
||||
@@ -1020,6 +1020,8 @@ static void capabilities_drop_now()
|
||||
capng_clear(CAPNG_SELECT_BOTH);
|
||||
capng_updatev(CAPNG_ADD, (capng_type_t)(CAPNG_EFFECTIVE|CAPNG_PERMITTED),
|
||||
CAP_SYS_ADMIN, CAP_MKNOD, CAP_SYS_RAWIO, -1);
|
||||
+ capng_updatev(CAPNG_ADD, (capng_type_t)(CAPNG_BOUNDING_SET),
|
||||
+ CAP_SETGID, CAP_SETUID, CAP_CHOWN, CAP_FOWNER, CAP_DAC_OVERRIDE, -1);
|
||||
capng_apply(CAPNG_SELECT_BOTH);
|
||||
}
|
||||
|
||||
@@ -1030,9 +1032,8 @@ static void capabilities_check_config(de
|
||||
for (unsigned i = 0; i < configs.size(); i++) {
|
||||
dev_config & cfg = configs[i];
|
||||
if (!cfg.emailaddress.empty() || !cfg.emailcmdline.empty()) {
|
||||
- PrintOut(LOG_INFO, "Device: %s, --capabilites is set, mail will be suppressed.\n",
|
||||
+ PrintOut(LOG_INFO, "Device: %s, --capabilites is set, mail notification may not work.\n",
|
||||
cfg.name.c_str());
|
||||
- cfg.emailaddress.clear(); cfg.emailcmdline.clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1633,7 +1634,7 @@ static void Usage()
|
||||
#ifdef HAVE_LIBCAP_NG
|
||||
PrintOut(LOG_INFO," -C, --capabilities\n");
|
||||
PrintOut(LOG_INFO," Drop unneeded Linux process capabilities.\n"
|
||||
- " Warning: Mail notification does not work when used.\n\n");
|
||||
+ " Warning: Mail notification may not work when used.\n\n");
|
||||
#endif
|
||||
PrintOut(LOG_INFO," -d, --debug\n");
|
||||
PrintOut(LOG_INFO," Start smartd in debug mode\n\n");
|
@ -1,231 +0,0 @@
|
||||
From 7c207dd5d06efccdee7258f832d4216fe5d1d998 Mon Sep 17 00:00:00 2001
|
||||
From: "Milan P. Gandhi" <mgandhi@redhat.com>
|
||||
Date: Mon, 17 Oct 2022 14:25:34 +0530
|
||||
Subject: [PATCH 3/3] scsiprint.cpp: applied patch proposed by Yannick Hemery
|
||||
to merge both 'supported' log pages
|
||||
|
||||
---
|
||||
smartmontools-7.1/scsicmds.h | 5 ++
|
||||
smartmontools-7.1/scsiprint.cpp | 103 +++++++++++++++++---------------
|
||||
2 files changed, 59 insertions(+), 49 deletions(-)
|
||||
|
||||
diff --git a/smartmontools-7.1/scsicmds.h b/smartmontools-7.1/scsicmds.h
|
||||
index 516f773..9bd8b21 100644
|
||||
--- a/smartmontools-7.1/scsicmds.h
|
||||
+++ b/smartmontools-7.1/scsicmds.h
|
||||
@@ -167,6 +167,11 @@ struct scsi_readcap_resp {
|
||||
uint16_t l_a_lba; /* Lowest Aligned Logical Block Address */
|
||||
};
|
||||
|
||||
+struct scsi_supp_log_pages {
|
||||
+ uint8_t page_code;
|
||||
+ uint8_t subpage_code;
|
||||
+};
|
||||
+
|
||||
/* SCSI Peripheral types (of interest) */
|
||||
#define SCSI_PT_DIRECT_ACCESS 0x0
|
||||
#define SCSI_PT_SEQUENTIAL_ACCESS 0x1
|
||||
diff --git a/smartmontools-7.1/scsiprint.cpp b/smartmontools-7.1/scsiprint.cpp
|
||||
index 81bed88..21a4929 100644
|
||||
--- a/smartmontools-7.1/scsiprint.cpp
|
||||
+++ b/smartmontools-7.1/scsiprint.cpp
|
||||
@@ -39,6 +39,9 @@ uint8_t gBuf[GBUF_SIZE];
|
||||
#define LOG_RESP_LONG_LEN ((62 * 256) + 252)
|
||||
#define LOG_RESP_TAPE_ALERT_LEN 0x144
|
||||
|
||||
+/* Supported log pages + Supported log pages and subpages maximum count */
|
||||
+#define SCSI_SUPP_LOG_PAGES_MAX_COUNT (252 + (62 * 128) + 126)
|
||||
+
|
||||
/* Log pages supported */
|
||||
static bool gSmartLPage = false; /* Informational Exceptions log page */
|
||||
static bool gTempLPage = false;
|
||||
@@ -118,14 +121,17 @@ static void
|
||||
scsiGetSupportedLogPages(scsi_device * device)
|
||||
{
|
||||
bool got_subpages = false;
|
||||
- int k, bump, err, resp_len, num_unreported, num_unreported_spg;
|
||||
- int resp_len_pg0_0 = 0;
|
||||
- int resp_len_pg0_ff = 0; /* in SPC-4, response length of supported
|
||||
- * log pages _and_ log subpages */
|
||||
+ int k, err, resp_len, num_unreported, num_unreported_spg;
|
||||
+ int supp_lpg_and_spg_count = 0;
|
||||
+
|
||||
const uint8_t * up;
|
||||
uint8_t sup_lpgs[LOG_RESP_LEN];
|
||||
+ struct scsi_supp_log_pages supp_lpg_and_spg[SCSI_SUPP_LOG_PAGES_MAX_COUNT];
|
||||
|
||||
memset(gBuf, 0, LOG_RESP_LEN);
|
||||
+ memset(supp_lpg_and_spg, 0, sizeof(supp_lpg_and_spg));
|
||||
+
|
||||
+ /* Get supported log pages */
|
||||
if ((err = scsiLogSense(device, SUPPORTED_LPAGES, 0, gBuf,
|
||||
LOG_RESP_LEN, 0 /* do double fetch */))) {
|
||||
if (scsi_debugmode > 0)
|
||||
@@ -140,12 +146,23 @@ scsiGetSupportedLogPages(scsi_device * device)
|
||||
logSenStr, scsiErrString(err));
|
||||
if (err)
|
||||
return;
|
||||
- memcpy(sup_lpgs, gBuf, LOG_RESP_LEN);
|
||||
- } else if ((scsi_version >= SCSI_VERSION_SPC_4) &&
|
||||
- (scsi_version <= SCSI_VERSION_HIGHEST)) {
|
||||
+ }
|
||||
+
|
||||
+ memcpy(sup_lpgs, gBuf, LOG_RESP_LEN);
|
||||
+ resp_len = gBuf[3];
|
||||
+ up = gBuf + LOGPAGEHDRSIZE;
|
||||
+
|
||||
+ for (k = 0; k < resp_len; k += 1) {
|
||||
+ uint8_t page_code = 0x3f & up[k];
|
||||
+ supp_lpg_and_spg[supp_lpg_and_spg_count++] = {page_code, 0};
|
||||
+ }
|
||||
+
|
||||
+ /* Get supported log pages and subpages. Most drives seems to include the
|
||||
+ supported log pages here as well, but some drives such as the Samsung
|
||||
+ PM1643a will only report the additional log pages with subpages here */
|
||||
+ if ((scsi_version >= SCSI_VERSION_SPC_4) &&
|
||||
+ (scsi_version <= SCSI_VERSION_HIGHEST)) {
|
||||
/* unclear what code T10 will choose for SPC-6 */
|
||||
- memcpy(sup_lpgs, gBuf, LOG_RESP_LEN);
|
||||
- resp_len_pg0_0 = sup_lpgs[3];
|
||||
if ((err = scsiLogSense(device, SUPPORTED_LPAGES, SUPP_SPAGE_L_SPAGE,
|
||||
gBuf, LOG_RESP_LONG_LEN,
|
||||
-1 /* just single not double fetch */))) {
|
||||
@@ -153,6 +170,7 @@ scsiGetSupportedLogPages(scsi_device * device)
|
||||
pout("%s for supported pages and subpages failed [%s]\n",
|
||||
logSenStr, scsiErrString(err));
|
||||
} else {
|
||||
+ /* Ensure we didn't get the same answer than without the subpages */
|
||||
if (0 == memcmp(gBuf, sup_lpgs, LOG_RESP_LEN)) {
|
||||
if (scsi_debugmode > 0)
|
||||
pout("%s: %s ignored subpage field, bad\n",
|
||||
@@ -163,48 +181,34 @@ scsiGetSupportedLogPages(scsi_device * device)
|
||||
pout("%s supported subpages is bad SPF=%u SUBPG=%u\n",
|
||||
logSenRspStr, !! (0x40 & gBuf[0]), gBuf[2]);
|
||||
} else {
|
||||
- resp_len_pg0_ff = sg_get_unaligned_be16(gBuf + 2);
|
||||
got_subpages = true;
|
||||
}
|
||||
}
|
||||
- } else {
|
||||
- memcpy(sup_lpgs, gBuf, LOG_RESP_LEN);
|
||||
- resp_len_pg0_0 = sup_lpgs[3];
|
||||
}
|
||||
|
||||
if (got_subpages) {
|
||||
resp_len = sg_get_unaligned_be16(gBuf + 2);
|
||||
- if (resp_len_pg0_ff <= resp_len_pg0_0) {
|
||||
- /* something is rotten ....., ignore SUPP_SPAGE_L_SPAGE */
|
||||
- resp_len = resp_len_pg0_0;
|
||||
- bump = 1;
|
||||
- up = sup_lpgs + LOGPAGEHDRSIZE;
|
||||
- got_subpages = false;
|
||||
- (void)got_subpages; // not yet used below, suppress warning
|
||||
- } else {
|
||||
- resp_len = resp_len_pg0_ff;
|
||||
- bump = 2;
|
||||
- up = gBuf + LOGPAGEHDRSIZE;
|
||||
+ up = gBuf + LOGPAGEHDRSIZE;
|
||||
+ for (k = 0; k < resp_len; k += 2) {
|
||||
+ uint8_t page_code = 0x3f & up[k];
|
||||
+ uint8_t subpage_code = up[k+1];
|
||||
+ supp_lpg_and_spg[supp_lpg_and_spg_count++] = {page_code, subpage_code};
|
||||
}
|
||||
- } else {
|
||||
- resp_len = resp_len_pg0_0;
|
||||
- bump = 1;
|
||||
- up = sup_lpgs + LOGPAGEHDRSIZE;
|
||||
}
|
||||
|
||||
+ num_unreported = 0;
|
||||
num_unreported_spg = 0;
|
||||
- for (num_unreported = 0, k = 0; k < resp_len; k += bump, up += bump) {
|
||||
- uint8_t pg_num = 0x3f & up[0];
|
||||
- uint8_t sub_pg_num = (0x40 & up[0]) ? up[1] : 0;
|
||||
+ for (k = 0; k < supp_lpg_and_spg_count; k += 1) {
|
||||
+ struct scsi_supp_log_pages supp_lpg = supp_lpg_and_spg[k];
|
||||
|
||||
- switch (pg_num)
|
||||
+ switch (supp_lpg.page_code)
|
||||
{
|
||||
case SUPPORTED_LPAGES:
|
||||
- if (! ((NO_SUBPAGE_L_SPAGE == sub_pg_num) ||
|
||||
- (SUPP_SPAGE_L_SPAGE == sub_pg_num))) {
|
||||
+ if (! ((NO_SUBPAGE_L_SPAGE == supp_lpg.subpage_code) ||
|
||||
+ (SUPP_SPAGE_L_SPAGE == supp_lpg.subpage_code))) {
|
||||
if (scsi_debugmode > 1)
|
||||
pout("%s: Strange Log page number: 0x0,0x%x\n",
|
||||
- __func__, sub_pg_num);
|
||||
+ __func__, supp_lpg.subpage_code);
|
||||
}
|
||||
break;
|
||||
case READ_ERROR_COUNTER_LPAGE:
|
||||
@@ -223,13 +227,13 @@ scsiGetSupportedLogPages(scsi_device * device)
|
||||
gNonMediumELPage = true;
|
||||
break;
|
||||
case TEMPERATURE_LPAGE:
|
||||
- if (NO_SUBPAGE_L_SPAGE == sub_pg_num)
|
||||
+ if (NO_SUBPAGE_L_SPAGE == supp_lpg.subpage_code)
|
||||
gTempLPage = true;
|
||||
- else if (ENVIRO_REP_L_SPAGE == sub_pg_num)
|
||||
+ else if (ENVIRO_REP_L_SPAGE == supp_lpg.subpage_code)
|
||||
gEnviroReportingLPage = true;
|
||||
- else if (ENVIRO_LIMITS_L_SPAGE == sub_pg_num)
|
||||
+ else if (ENVIRO_LIMITS_L_SPAGE == supp_lpg.subpage_code)
|
||||
gEnviroLimitsLPage = true;
|
||||
- else if (SUPP_SPAGE_L_SPAGE != sub_pg_num) {
|
||||
+ else if (SUPP_SPAGE_L_SPAGE != supp_lpg.subpage_code) {
|
||||
++num_unreported;
|
||||
++num_unreported_spg;
|
||||
}
|
||||
@@ -238,11 +242,11 @@ scsiGetSupportedLogPages(scsi_device * device)
|
||||
reporting of <lpage>,0xff so it is not an error. */
|
||||
break;
|
||||
case STARTSTOP_CYCLE_COUNTER_LPAGE:
|
||||
- if (NO_SUBPAGE_L_SPAGE == sub_pg_num)
|
||||
+ if (NO_SUBPAGE_L_SPAGE == supp_lpg.subpage_code)
|
||||
gStartStopLPage = true;
|
||||
- else if (UTILIZATION_L_SPAGE == sub_pg_num)
|
||||
+ else if (UTILIZATION_L_SPAGE == supp_lpg.subpage_code)
|
||||
gUtilizationLPage = true;
|
||||
- else if (SUPP_SPAGE_L_SPAGE != sub_pg_num) {
|
||||
+ else if (SUPP_SPAGE_L_SPAGE != supp_lpg.subpage_code) {
|
||||
++num_unreported;
|
||||
++num_unreported_spg;
|
||||
}
|
||||
@@ -254,15 +258,15 @@ scsiGetSupportedLogPages(scsi_device * device)
|
||||
gSmartLPage = true;
|
||||
break;
|
||||
case BACKGROUND_RESULTS_LPAGE:
|
||||
- if (NO_SUBPAGE_L_SPAGE == sub_pg_num)
|
||||
+ if (NO_SUBPAGE_L_SPAGE == supp_lpg.subpage_code)
|
||||
gBackgroundResultsLPage = true;
|
||||
- else if (PEND_DEFECTS_L_SPAGE == sub_pg_num)
|
||||
+ else if (PEND_DEFECTS_L_SPAGE == supp_lpg.subpage_code)
|
||||
gPendDefectsLPage = true;
|
||||
- else if (BACKGROUND_OP_L_SPAGE == sub_pg_num)
|
||||
+ else if (BACKGROUND_OP_L_SPAGE == supp_lpg.subpage_code)
|
||||
gBackgroundOpLPage = true;
|
||||
- else if (LPS_MISALIGN_L_SPAGE == sub_pg_num)
|
||||
+ else if (LPS_MISALIGN_L_SPAGE == supp_lpg.subpage_code)
|
||||
gLPSMisalignLPage = true;
|
||||
- else if (SUPP_SPAGE_L_SPAGE != sub_pg_num) {
|
||||
+ else if (SUPP_SPAGE_L_SPAGE != supp_lpg.subpage_code) {
|
||||
++num_unreported;
|
||||
++num_unreported_spg;
|
||||
}
|
||||
@@ -296,9 +300,10 @@ scsiGetSupportedLogPages(scsi_device * device)
|
||||
gSeagateFactoryLPage = true;
|
||||
break;
|
||||
default:
|
||||
- if (pg_num < 0x30) { /* don't count VS pages */
|
||||
+ if (supp_lpg.page_code < 0x30) { /* don't count VS pages */
|
||||
++num_unreported;
|
||||
- if ((sub_pg_num > 0) && (SUPP_SPAGE_L_SPAGE != sub_pg_num))
|
||||
+ if ((supp_lpg.subpage_code > 0) &&
|
||||
+ (SUPP_SPAGE_L_SPAGE != supp_lpg.subpage_code))
|
||||
++num_unreported_spg;
|
||||
}
|
||||
break;
|
||||
--
|
||||
2.35.1
|
||||
|
@ -1,38 +0,0 @@
|
||||
diff -up smartmontools-7.2/os_linux.cpp.permsfix smartmontools-7.2/os_linux.cpp
|
||||
--- smartmontools-7.2/os_linux.cpp.permsfix 2021-11-02 22:08:51.956425716 +0100
|
||||
+++ smartmontools-7.2/os_linux.cpp 2021-11-02 22:09:55.928583584 +0100
|
||||
@@ -1022,7 +1022,7 @@ bool linux_aacraid_device::open()
|
||||
return set_err(ENOENT, "aac entry not found in /proc/devices");
|
||||
|
||||
//Create misc device file in /dev/ used for communication with driver
|
||||
- if(mknod(dev_name,S_IFCHR,makedev(mjr,aHost)))
|
||||
+ if(mknod(dev_name,S_IFCHR|0600,makedev(mjr,aHost)))
|
||||
return set_err(errno,"cannot create %s:%s",dev_name,strerror(errno));
|
||||
|
||||
afd = ::open(dev_name,O_RDWR);
|
||||
@@ -1298,14 +1298,14 @@ bool linux_megaraid_device::open()
|
||||
while (fgets(line, sizeof(line), fp) != NULL) {
|
||||
int n1 = 0;
|
||||
if (sscanf(line, "%d megaraid_sas_ioctl%n", &mjr, &n1) == 1 && n1 == 22) {
|
||||
- n1=mknod("/dev/megaraid_sas_ioctl_node", S_IFCHR, makedev(mjr, 0));
|
||||
+ n1=mknod("/dev/megaraid_sas_ioctl_node", S_IFCHR|0600, makedev(mjr, 0));
|
||||
if(report > 0)
|
||||
pout("Creating /dev/megaraid_sas_ioctl_node = %d\n", n1 >= 0 ? 0 : errno);
|
||||
if (n1 >= 0 || errno == EEXIST)
|
||||
break;
|
||||
}
|
||||
else if (sscanf(line, "%d megadev%n", &mjr, &n1) == 1 && n1 == 11) {
|
||||
- n1=mknod("/dev/megadev0", S_IFCHR, makedev(mjr, 0));
|
||||
+ n1=mknod("/dev/megadev0", S_IFCHR|0600, makedev(mjr, 0));
|
||||
if(report > 0)
|
||||
pout("Creating /dev/megadev0 = %d\n", n1 >= 0 ? 0 : errno);
|
||||
if (n1 >= 0 || errno == EEXIST)
|
||||
@@ -2970,7 +2970,7 @@ bool linux_smart_interface::get_dev_mega
|
||||
n1=0;
|
||||
if (sscanf(line, "%d megaraid_sas_ioctl%n", &mjr, &n1) == 1 && n1 == 22) {
|
||||
scan_megasas = true;
|
||||
- n1=mknod("/dev/megaraid_sas_ioctl_node", S_IFCHR, makedev(mjr, 0));
|
||||
+ n1=mknod("/dev/megaraid_sas_ioctl_node", S_IFCHR|0600, makedev(mjr, 0));
|
||||
if(scsi_debugmode > 0)
|
||||
pout("Creating /dev/megaraid_sas_ioctl_node = %d\n", n1 >= 0 ? 0 : errno);
|
||||
if (n1 >= 0 || errno == EEXIST)
|
@ -0,0 +1,32 @@
|
||||
diff -up smartmontools-7.4/farmprint.cpp.fix_sast smartmontools-7.4/farmprint.cpp
|
||||
--- smartmontools-7.4/farmprint.cpp.fix_sast 2024-08-06 16:38:15.152139278 +0200
|
||||
+++ smartmontools-7.4/farmprint.cpp 2024-08-06 16:39:35.309972436 +0200
|
||||
@@ -173,6 +173,7 @@ void ataPrintFarmLog(const ataFarmLog& f
|
||||
farm_format_id_string(firmwareRev, farm_byte_swap(farmLog.driveInformation.firmwareRev2), farm_byte_swap(farmLog.driveInformation.firmwareRev));
|
||||
|
||||
char modelNumber[sizeof(farmLog.driveInformation.modelNumber) + 1];
|
||||
+ modelNumber[0] = '\0';
|
||||
for (uint8_t i = 0; i < sizeof(farmLog.driveInformation.modelNumber) / sizeof(farmLog.driveInformation.modelNumber[0]); i++) {
|
||||
farm_format_id_string(&modelNumber[strlen(modelNumber)], farm_byte_swap(farmLog.driveInformation.modelNumber[i]));
|
||||
}
|
||||
diff -up smartmontools-7.4/scsicmds.cpp.fix_sast smartmontools-7.4/scsicmds.cpp
|
||||
--- smartmontools-7.4/scsicmds.cpp.fix_sast 2024-08-06 16:32:18.058427672 +0200
|
||||
+++ smartmontools-7.4/scsicmds.cpp 2024-08-06 16:37:56.041940650 +0200
|
||||
@@ -200,7 +200,7 @@ scsi_device::cmd_support_level(uint8_t o
|
||||
|
||||
supported_vpd_pages::supported_vpd_pages(scsi_device * device) : num_valid(0)
|
||||
{
|
||||
- unsigned char b[0xfc] = {}; /* pre SPC-3 INQUIRY max response size */
|
||||
+ unsigned char b[260] = {}; /* pre SPC-3 INQUIRY max response size, but also allow sizeof(pages)+4 for memcpy bellow */
|
||||
|
||||
if (device && (0 == scsiInquiryVpd(device, SCSI_VPD_SUPPORTED_VPD_PAGES,
|
||||
b, sizeof(b)))) {
|
||||
@@ -1807,7 +1807,7 @@ scsiModePageOffset(const uint8_t * resp,
|
||||
bd_len = resp[3];
|
||||
offset = bd_len + 4;
|
||||
}
|
||||
- if ((offset + 2) > len) {
|
||||
+ if ((offset + 2) >= len) {
|
||||
pout("scsiModePageOffset: raw_curr too small, offset=%d "
|
||||
"resp_len=%d bd_len=%d\n", offset, resp_len, bd_len);
|
||||
offset = -1;
|
@ -1,6 +1,3 @@
|
||||
# command line options for smartd
|
||||
# Add -s /var/lib/smartmontools to enable state persistence
|
||||
smartd_opts="-q never --capabilities"
|
||||
|
||||
# autogenerated config file options
|
||||
# smartd_conf_opts="-H -m root"
|
||||
# Add -s /var/lib/smartmontools/ to enable state persistence
|
||||
smartd_opts="-q never --capabilities=mail"
|
||||
|
Loading…
Reference in new issue