diff --git a/SOURCES/redhat-bugzilla-1804146.patch b/SOURCES/redhat-bugzilla-1804146.patch
new file mode 100644
index 0000000..a4a9d61
--- /dev/null
+++ b/SOURCES/redhat-bugzilla-1804146.patch
@@ -0,0 +1,111 @@
+diff -Naurp pcp-4.3.2-orig/src/pcp/atop/atop.c pcp-4.3.2/src/pcp/atop/atop.c
+--- pcp-4.3.2-orig/src/pcp/atop/atop.c	2019-03-14 08:01:57.000000000 +1100
++++ pcp-4.3.2/src/pcp/atop/atop.c	2020-02-19 12:43:05.073078137 +1100
+@@ -632,14 +632,12 @@ engine(void)
+ 		*/
+ 		if (nprocexit > 0)
+ 		{
+-			curpexit = malloc(nprocexit * sizeof(struct tstat));
++			curpexit = calloc(nprocexit, sizeof(struct tstat));
+ 
+ 			ptrverify(curpexit,
+ 			          "Malloc failed for %lu exited processes\n",
+ 			          nprocexit);
+ 
+-			memset(curpexit, 0, nprocexit * sizeof(struct tstat));
+-
+ 			nprocexit = acctphotoproc(curpexit, nprocexit);
+ 
+ 			/*
+diff -Naurp pcp-4.3.2-orig/src/pcp/atop/deviate.c pcp-4.3.2/src/pcp/atop/deviate.c
+--- pcp-4.3.2-orig/src/pcp/atop/deviate.c	2019-03-08 08:26:34.000000000 +1100
++++ pcp-4.3.2/src/pcp/atop/deviate.c	2020-02-19 12:43:05.076078101 +1100
+@@ -84,7 +84,7 @@ deviattask(struct tstat    *curtpres, un
+ 	** create list for the sample deviations of all tasks
+ 	*/
+  	devtstat->ntaskall = ntaskpres + nprocexit;
+-	devtstat->taskall  = malloc(devtstat->ntaskall * sizeof(struct tstat));
++	devtstat->taskall  = calloc(devtstat->ntaskall, sizeof(struct tstat));
+ 
+ 	ptrverify(devtstat->taskall, "Malloc failed for %lu deviated tasks\n",
+                                   devtstat->ntaskall);
+@@ -371,9 +371,9 @@ deviattask(struct tstat    *curtpres, un
+ 	/*
+ 	** create and fill other pointer lists
+ 	*/
+-	devtstat->procall    = malloc(devtstat->nprocall *
++	devtstat->procall    = calloc(devtstat->nprocall,
+ 						sizeof(struct tstat *));
+-	devtstat->procactive = malloc(devtstat->nprocactive *
++	devtstat->procactive = calloc(devtstat->nprocactive,
+ 						sizeof(struct tstat *));
+ 
+ 	ptrverify(devtstat->procall, "Malloc failed for %d processes\n",
+diff -Naurp pcp-4.3.2-orig/src/pcp/atop/photoproc.c pcp-4.3.2/src/pcp/atop/photoproc.c
+--- pcp-4.3.2-orig/src/pcp/atop/photoproc.c	2019-01-24 10:23:34.000000000 +1100
++++ pcp-4.3.2/src/pcp/atop/photoproc.c	2020-02-19 12:43:05.076078101 +1100
+@@ -166,8 +166,10 @@ photoproc(struct tstat **tasks, unsigned
+ 		fprintf(stderr, "%s: done %lu processes\n", pmGetProgname(), count);
+ 
+ 	pmFreeResult(result);
+-	free(insts);
+-	free(pids);
++	if (count > 0) {
++	    free(insts);
++	    free(pids);
++	}
+ 
+ 	return count;
+ }
+diff -Naurp pcp-4.3.2-orig/src/pcp/atop/showlinux.c pcp-4.3.2/src/pcp/atop/showlinux.c
+--- pcp-4.3.2-orig/src/pcp/atop/showlinux.c	2019-01-24 10:24:56.000000000 +1100
++++ pcp-4.3.2/src/pcp/atop/showlinux.c	2020-02-19 12:43:05.077078090 +1100
+@@ -654,19 +654,22 @@ totalcap(struct syscap *psc, struct ssta
+ 		struct tstat 	*curstat = *(proclist+i);
+ 		count_t		nett_wsz;
+ 
+-		psc->availnet += curstat->net.tcpssz;
+-		psc->availnet += curstat->net.tcprsz;
+-		psc->availnet += curstat->net.udpssz;
+-		psc->availnet += curstat->net.udprsz;
+-
+-		if (curstat->dsk.wsz > curstat->dsk.cwsz)
+-			nett_wsz = curstat->dsk.wsz -
+-			           curstat->dsk.cwsz;
+-		else
+-			nett_wsz = 0;
++		if (curstat)
++		{
++			psc->availnet += curstat->net.tcpssz;
++			psc->availnet += curstat->net.tcprsz;
++			psc->availnet += curstat->net.udpssz;
++			psc->availnet += curstat->net.udprsz;
++
++			if (curstat->dsk.wsz > curstat->dsk.cwsz)
++				nett_wsz = curstat->dsk.wsz -
++					   curstat->dsk.cwsz;
++			else
++				nett_wsz = 0;
+ 
+-		psc->availdsk += curstat->dsk.rsz;
+-		psc->availdsk += nett_wsz;
++			psc->availdsk += curstat->dsk.rsz;
++			psc->availdsk += nett_wsz;
++		}
+ 	}
+ 
+ 	for (psc->availgpumem=i=0; i < sstat->gpu.nrgpus; i++)
+@@ -985,8 +988,11 @@ pricumproc(struct sstat *sstat, struct d
+         {
+ 		struct tstat *curstat = *(devtstat->procactive+i);
+ 
+-                extra.totut	+= curstat->cpu.utime;
+-                extra.totst 	+= curstat->cpu.stime;
++		if (curstat)
++		{
++			extra.totut	+= curstat->cpu.utime;
++			extra.totst 	+= curstat->cpu.stime;
++		}
+         }
+ 
+         extra.nproc	= devtstat->nprocall;
diff --git a/SPECS/pcp.spec b/SPECS/pcp.spec
index 6b57466..b39fd2b 100644
--- a/SPECS/pcp.spec
+++ b/SPECS/pcp.spec
@@ -1,6 +1,6 @@
 Name:    pcp
 Version: 4.3.2
-Release: 6%{?dist}
+Release: 7%{?dist}
 Summary: System-level performance monitoring and performance management
 License: GPLv2+ and LGPLv2+ and CC-BY
 URL:     https://pcp.io
@@ -21,6 +21,7 @@ Patch3: selinux-override.patch
 Patch4: qa-fixmod.patch
 Patch5: redhat-bugzilla-1721107.patch
 Patch6: redhat-bugzilla-1673053.patch
+Patch7: redhat-bugzilla-1804146.patch
 
 %if 0%{?fedora} >= 26 || 0%{?rhel} > 7
 %global __python2 python2
@@ -2107,6 +2108,7 @@ adjustments for an updated policy package.
 %patch4 -p1
 %patch5 -p1
 %patch6 -p1
+%patch7 -p1
 
 %build
 %if !%{disable_python2} && 0%{?default_python} != 3
@@ -3317,6 +3319,9 @@ cd
 %endif
 
 %changelog
+* Wed Feb 19 2020 Nathan Scott <nathans@redhat.com> - 4.3.2-7
+- Resolve a pcp-atop(1) sigsegv crash (BZ 1804146)
+
 * Wed Aug 28 2019 Nathan Scott <nathans@redhat.com> - 4.3.2-6
 - Improve libpcp corrupt archive handling in multi-archive mode (BZ 1673053)