All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/6] SAST fixes
@ 2024-02-20 10:56 Mateusz Kusiak
  2024-02-20 10:56 ` [PATCH 1/6] Create: add_disk_to_super() fix resource leak Mateusz Kusiak
                   ` (6 more replies)
  0 siblings, 7 replies; 8+ messages in thread
From: Mateusz Kusiak @ 2024-02-20 10:56 UTC (permalink / raw)
  To: linux-raid; +Cc: jes, mariusz.tkaczyk

This patchset contains minor fixes for issues reported by SAST tool.

Mateusz Kusiak (6):
  Create: add_disk_to_super() fix resource leak
  mdadm: signal_s() init variables
  Monitor: open file before check in check_one_sharer()
  Grow: remove dead condition in Grow_reshape()
  super1: check fd before passing to get_dev_size() in add_to_super1()
  mdmon: refactor md device name check in main()

 Create.c  |  6 +++++-
 Grow.c    |  6 +-----
 Monitor.c | 13 +++++--------
 mdadm.h   |  5 ++---
 mdmon.c   | 21 +++++++++++----------
 super1.c  |  5 ++++-
 6 files changed, 28 insertions(+), 28 deletions(-)

-- 
2.35.3


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 1/6] Create: add_disk_to_super() fix resource leak
  2024-02-20 10:56 [PATCH 0/6] SAST fixes Mateusz Kusiak
@ 2024-02-20 10:56 ` Mateusz Kusiak
  2024-02-20 10:56 ` [PATCH 2/6] mdadm: signal_s() init variables Mateusz Kusiak
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Mateusz Kusiak @ 2024-02-20 10:56 UTC (permalink / raw)
  To: linux-raid; +Cc: jes, mariusz.tkaczyk

Fixes resource leak in add_disk_to_super().

Signed-off-by: Mateusz Kusiak <mateusz.kusiak@intel.com>
---
 Create.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/Create.c b/Create.c
index 8082f54a8fdc..7e9170b6a1ac 100644
--- a/Create.c
+++ b/Create.c
@@ -279,8 +279,10 @@ static int add_disk_to_super(int mdfd, struct shape *s, struct context *c,
 			       dv->devname);
 			return 1;
 		}
-		if (!fstat_is_blkdev(fd, dv->devname, &rdev))
+		if (!fstat_is_blkdev(fd, dv->devname, &rdev)) {
+			close(fd);
 			return 1;
+		}
 		info->disk.major = major(rdev);
 		info->disk.minor = minor(rdev);
 	}
@@ -289,6 +291,7 @@ static int add_disk_to_super(int mdfd, struct shape *s, struct context *c,
 	if (st->ss->add_to_super(st, &info->disk, fd, dv->devname,
 				 dv->data_offset)) {
 		ioctl(mdfd, STOP_ARRAY, NULL);
+		close(fd);
 		return 1;
 	}
 	st->ss->getinfo_super(st, info, NULL);
@@ -297,6 +300,7 @@ static int add_disk_to_super(int mdfd, struct shape *s, struct context *c,
 		*zero_pid = write_zeroes_fork(fd, s, st, dv);
 		if (*zero_pid <= 0) {
 			ioctl(mdfd, STOP_ARRAY, NULL);
+			close(fd);
 			return 1;
 		}
 	}
-- 
2.35.3


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/6] mdadm: signal_s() init variables
  2024-02-20 10:56 [PATCH 0/6] SAST fixes Mateusz Kusiak
  2024-02-20 10:56 ` [PATCH 1/6] Create: add_disk_to_super() fix resource leak Mateusz Kusiak
@ 2024-02-20 10:56 ` Mateusz Kusiak
  2024-02-20 10:56 ` [PATCH 3/6] Monitor: open file before check in check_one_sharer() Mateusz Kusiak
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Mateusz Kusiak @ 2024-02-20 10:56 UTC (permalink / raw)
  To: linux-raid; +Cc: jes, mariusz.tkaczyk

Init sigaction structs in signal_s().
This approach might throw warnings for GCC 4.x and lower.

Signed-off-by: Mateusz Kusiak <mateusz.kusiak@intel.com>
---
 mdadm.h | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/mdadm.h b/mdadm.h
index 1f28b3e754be..75c887e4c64c 100644
--- a/mdadm.h
+++ b/mdadm.h
@@ -1856,11 +1856,10 @@ static inline char *to_subarray(struct mdstat_ent *ent, char *container)
  */
 static inline sighandler_t signal_s(int sig, sighandler_t handler)
 {
-	struct sigaction new_act;
-	struct sigaction old_act;
+	struct sigaction new_act = {0};
+	struct sigaction old_act = {0};
 
 	new_act.sa_handler = handler;
-	new_act.sa_flags = 0;
 
 	if (sigaction(sig, &new_act, &old_act) == 0)
 		return old_act.sa_handler;
-- 
2.35.3


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 3/6] Monitor: open file before check in check_one_sharer()
  2024-02-20 10:56 [PATCH 0/6] SAST fixes Mateusz Kusiak
  2024-02-20 10:56 ` [PATCH 1/6] Create: add_disk_to_super() fix resource leak Mateusz Kusiak
  2024-02-20 10:56 ` [PATCH 2/6] mdadm: signal_s() init variables Mateusz Kusiak
@ 2024-02-20 10:56 ` Mateusz Kusiak
  2024-02-20 10:56 ` [PATCH 4/6] Grow: remove dead condition in Grow_reshape() Mateusz Kusiak
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Mateusz Kusiak @ 2024-02-20 10:56 UTC (permalink / raw)
  To: linux-raid; +Cc: jes, mariusz.tkaczyk

Open file before performing checks in check_one_sharer() to avoid
file tampering.
Remove redundant access check.

Signed-off-by: Mateusz Kusiak <mateusz.kusiak@intel.com>
---
 Monitor.c | 13 +++++--------
 1 file changed, 5 insertions(+), 8 deletions(-)

diff --git a/Monitor.c b/Monitor.c
index 824a69fc6b79..7cee95d4487a 100644
--- a/Monitor.c
+++ b/Monitor.c
@@ -451,20 +451,17 @@ static int check_one_sharer(int scan)
 		return 2;
 	}
 
-	if (access(AUTOREBUILD_PID_PATH, F_OK) != 0)
-		return 0;
-
-	if (!is_file(AUTOREBUILD_PID_PATH)) {
-		pr_err("%s is not a regular file.\n", AUTOREBUILD_PID_PATH);
-		return 2;
-	}
-
 	fp = fopen(AUTOREBUILD_PID_PATH, "r");
 	if (!fp) {
 		pr_err("Cannot open %s file.\n", AUTOREBUILD_PID_PATH);
 		return 2;
 	}
 
+	if (!is_file(AUTOREBUILD_PID_PATH)) {
+		pr_err("%s is not a regular file.\n", AUTOREBUILD_PID_PATH);
+		return 2;
+	}
+
 	if (fscanf(fp, "%d", &pid) != 1) {
 		pr_err("Cannot read pid from %s file.\n", AUTOREBUILD_PID_PATH);
 		fclose(fp);
-- 
2.35.3


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 4/6] Grow: remove dead condition in Grow_reshape()
  2024-02-20 10:56 [PATCH 0/6] SAST fixes Mateusz Kusiak
                   ` (2 preceding siblings ...)
  2024-02-20 10:56 ` [PATCH 3/6] Monitor: open file before check in check_one_sharer() Mateusz Kusiak
@ 2024-02-20 10:56 ` Mateusz Kusiak
  2024-02-20 10:56 ` [PATCH 5/6] super1: check fd before passing to get_dev_size() in add_to_super1() Mateusz Kusiak
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: Mateusz Kusiak @ 2024-02-20 10:56 UTC (permalink / raw)
  To: linux-raid; +Cc: jes, mariusz.tkaczyk

Remove dead "if" condition from Grow_reshape(). Sysfs read check is
performed earlier in the code.

Signed-off-by: Mateusz Kusiak <mateusz.kusiak@intel.com>
---
 Grow.c | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/Grow.c b/Grow.c
index f95dae82ef0d..dad7294dac32 100644
--- a/Grow.c
+++ b/Grow.c
@@ -2097,11 +2097,7 @@ int Grow_reshape(char *devname, int fd,
 			/* got truncated to 32bit, write to
 			 * component_size instead
 			 */
-			if (sra)
-				rv = sysfs_set_num(sra, NULL,
-						   "component_size", s->size);
-			else
-				rv = -1;
+			rv = sysfs_set_num(sra, NULL, "component_size", s->size);
 		} else {
 			rv = md_set_array_info(fd, &array);
 
-- 
2.35.3


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 5/6] super1: check fd before passing to get_dev_size() in add_to_super1()
  2024-02-20 10:56 [PATCH 0/6] SAST fixes Mateusz Kusiak
                   ` (3 preceding siblings ...)
  2024-02-20 10:56 ` [PATCH 4/6] Grow: remove dead condition in Grow_reshape() Mateusz Kusiak
@ 2024-02-20 10:56 ` Mateusz Kusiak
  2024-02-20 10:56 ` [PATCH 6/6] mdmon: refactor md device name check in main() Mateusz Kusiak
  2024-02-23 11:45 ` [PATCH 0/6] SAST fixes Mariusz Tkaczyk
  6 siblings, 0 replies; 8+ messages in thread
From: Mateusz Kusiak @ 2024-02-20 10:56 UTC (permalink / raw)
  To: linux-raid; +Cc: jes, mariusz.tkaczyk

Check if file descriptor is valid before passing it to get_dev_size() in
add_to_super().

Signed-off-by: Mateusz Kusiak <mateusz.kusiak@intel.com>
---
 super1.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/super1.c b/super1.c
index 871d19f0398c..5439b7bb1240 100644
--- a/super1.c
+++ b/super1.c
@@ -1752,7 +1752,10 @@ static int add_to_super1(struct supertype *st, mdu_disk_info_t *dk,
 	di->devname = devname;
 	di->disk = *dk;
 	di->data_offset = data_offset;
-	get_dev_size(fd, NULL, &di->dev_size);
+
+	if (is_fd_valid(fd))
+		get_dev_size(fd, NULL, &di->dev_size);
+
 	di->next = NULL;
 	*dip = di;
 
-- 
2.35.3


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 6/6] mdmon: refactor md device name check in main()
  2024-02-20 10:56 [PATCH 0/6] SAST fixes Mateusz Kusiak
                   ` (4 preceding siblings ...)
  2024-02-20 10:56 ` [PATCH 5/6] super1: check fd before passing to get_dev_size() in add_to_super1() Mateusz Kusiak
@ 2024-02-20 10:56 ` Mateusz Kusiak
  2024-02-23 11:45 ` [PATCH 0/6] SAST fixes Mariusz Tkaczyk
  6 siblings, 0 replies; 8+ messages in thread
From: Mateusz Kusiak @ 2024-02-20 10:56 UTC (permalink / raw)
  To: linux-raid; +Cc: jes, mariusz.tkaczyk

Refactor mdmon main function to verify if fd is valid prior to checking
device name. This is due to static code analysis complaining after
change b938519e7719 ("util: remove obsolete code from get_md_name").

Signed-off-by: Mateusz Kusiak <mateusz.kusiak@intel.com>
---
 mdmon.c | 21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

diff --git a/mdmon.c b/mdmon.c
index a2038fe6c35f..5fdb5cdb5a49 100644
--- a/mdmon.c
+++ b/mdmon.c
@@ -302,12 +302,12 @@ static int mdmon(char *devnm, int must_fork, int takeover);
 int main(int argc, char *argv[])
 {
 	char *container_name = NULL;
-	char *devnm = NULL;
 	int status = 0;
 	int opt;
 	int all = 0;
 	int takeover = 0;
 	int dofork = 1;
+	int mdfd = -1;
 	bool help = false;
 	static struct option options[] = {
 		{"all", 0, NULL, 'a'},
@@ -410,19 +410,20 @@ int main(int argc, char *argv[])
 		free_mdstat(mdstat);
 
 		return status;
-	} else {
-		int mdfd = open_mddev(container_name, 0);
-		devnm = fd2devnm(mdfd);
+	}
+
+	mdfd = open_mddev(container_name, 0);
+	if (is_fd_valid(mdfd)) {
+		char *devnm = fd2devnm(mdfd);
 
 		close(mdfd);
-	}
 
-	if (!devnm) {
-		pr_err("%s is not a valid md device name\n",
-			container_name);
-		return 1;
+		if (devnm)
+			return mdmon(devnm, dofork && do_fork(), takeover);
 	}
-	return mdmon(devnm, dofork && do_fork(), takeover);
+
+	pr_err("%s is not a valid md device name\n", container_name);
+	return 1;
 }
 
 static int mdmon(char *devnm, int must_fork, int takeover)
-- 
2.35.3


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 0/6] SAST fixes
  2024-02-20 10:56 [PATCH 0/6] SAST fixes Mateusz Kusiak
                   ` (5 preceding siblings ...)
  2024-02-20 10:56 ` [PATCH 6/6] mdmon: refactor md device name check in main() Mateusz Kusiak
@ 2024-02-23 11:45 ` Mariusz Tkaczyk
  6 siblings, 0 replies; 8+ messages in thread
From: Mariusz Tkaczyk @ 2024-02-23 11:45 UTC (permalink / raw)
  To: Mateusz Kusiak; +Cc: linux-raid, jes

On Tue, 20 Feb 2024 11:56:06 +0100
Mateusz Kusiak <mateusz.kusiak@intel.com> wrote:

> This patchset contains minor fixes for issues reported by SAST tool.
> 
> Mateusz Kusiak (6):
>   Create: add_disk_to_super() fix resource leak
>   mdadm: signal_s() init variables
>   Monitor: open file before check in check_one_sharer()
>   Grow: remove dead condition in Grow_reshape()
>   super1: check fd before passing to get_dev_size() in add_to_super1()
>   mdmon: refactor md device name check in main()
> 
>  Create.c  |  6 +++++-
>  Grow.c    |  6 +-----
>  Monitor.c | 13 +++++--------
>  mdadm.h   |  5 ++---
>  mdmon.c   | 21 +++++++++++----------
>  super1.c  |  5 ++++-
>  6 files changed, 28 insertions(+), 28 deletions(-)
> 

All applied! 

Thanks,
Mariusz

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2024-02-23 11:45 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-02-20 10:56 [PATCH 0/6] SAST fixes Mateusz Kusiak
2024-02-20 10:56 ` [PATCH 1/6] Create: add_disk_to_super() fix resource leak Mateusz Kusiak
2024-02-20 10:56 ` [PATCH 2/6] mdadm: signal_s() init variables Mateusz Kusiak
2024-02-20 10:56 ` [PATCH 3/6] Monitor: open file before check in check_one_sharer() Mateusz Kusiak
2024-02-20 10:56 ` [PATCH 4/6] Grow: remove dead condition in Grow_reshape() Mateusz Kusiak
2024-02-20 10:56 ` [PATCH 5/6] super1: check fd before passing to get_dev_size() in add_to_super1() Mateusz Kusiak
2024-02-20 10:56 ` [PATCH 6/6] mdmon: refactor md device name check in main() Mateusz Kusiak
2024-02-23 11:45 ` [PATCH 0/6] SAST fixes Mariusz Tkaczyk

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.