On Wed, May 28, 2025 at 07:15:46PM +0200, Marc Haber wrote:
Debdiff attached.

Of course not. Now.

Greetings
Marc

--
-----------------------------------------------------------------------------
Marc Haber         | "I don't trust Computers. They | Mailadresse im Header
Leimen, Germany    |  lose things."    Winona Ryder | Fon: *49 6224 1600402
Nordisch by Nature |  How to make an American Quilt | Fax: *49 6224 1600421
diff -Nru atop-2.11.1/debian/changelog atop-2.11.1/debian/changelog
--- atop-2.11.1/debian/changelog        2025-05-04 18:41:13.000000000 +0200
+++ atop-2.11.1/debian/changelog        2025-05-28 18:07:22.000000000 +0200
@@ -1,3 +1,12 @@
+atop (2.11.1-3) unstable; urgency=medium
+
+  * replace sprintf with snprintf.
+  * new parameter for format_bandw to get rid of sprintf.
+  * fix buffer overflow crash on Raspberry Pi 5 (fake NUMA architecture)
+    Thanks to Gerlof Langeveld (Closes: #1106234)
+
+ -- Marc Haber <mh+debian-packa...@zugschlus.de>  Wed, 28 May 2025 18:07:22 
+0200
+
 atop (2.11.1-2) unstable; urgency=medium
 
   * rewrite postinst to address #1102488
diff -Nru atop-2.11.1/debian/patches/0016-replace-sprintf-with-snprintf.patch 
atop-2.11.1/debian/patches/0016-replace-sprintf-with-snprintf.patch
--- atop-2.11.1/debian/patches/0016-replace-sprintf-with-snprintf.patch 
1970-01-01 01:00:00.000000000 +0100
+++ atop-2.11.1/debian/patches/0016-replace-sprintf-with-snprintf.patch 
2025-05-28 18:07:22.000000000 +0200
@@ -0,0 +1,1083 @@
+From: Marc Haber <mh+debian-packa...@zugschlus.de>
+Date: Sun, 25 May 2025 20:59:39 +0200
+Subject: replace sprintf with snprintf
+
+Author: Gerlof Langeveld
+Forwarded: not-needed
+---
+ atop.c      |   2 +-
+ atopcat.c   |   2 +-
+ netlink.c   |   2 +-
+ photosyst.c |  15 +++++--
+ showlinux.c |   2 +-
+ showprocs.c | 108 +++++++++++++++++++++++------------------------
+ showsys.c   | 138 ++++++++++++++++++++++++++++++------------------------------
+ 7 files changed, 138 insertions(+), 131 deletions(-)
+
+diff --git a/atop.c b/atop.c
+index ea3865e..0040c61 100644
+--- a/atop.c
++++ b/atop.c
+@@ -1266,7 +1266,7 @@ twinprepare(void)
+ 
+       ptrverify(tempname, "Malloc failed for temporary twin name\n");
+ 
+-      sprintf(tempname, "%s/%s", twindir, TWINNAME);
++      snprintf(tempname, strlen(twindir) + sizeof TWINNAME + 1, "%s/%s", 
twindir, TWINNAME);
+ 
+       if ( (tempfd = mkstemp(tempname)) == -1)
+       {
+diff --git a/atopcat.c b/atopcat.c
+index fb014a0..2864011 100644
+--- a/atopcat.c
++++ b/atopcat.c
+@@ -365,7 +365,7 @@ convepoch(time_t utime)
+ 
+       tt = localtime(&utime);
+ 
+-      sprintf(datetime, "%04d/%02d/%02d %02d:%02d:%02d",
++      snprintf(datetime, sizeof datetime, "%04d/%02d/%02d %02d:%02d:%02d",
+                 tt->tm_year+1900, tt->tm_mon+1, tt->tm_mday,
+               tt->tm_hour, tt->tm_min, tt->tm_sec);
+ 
+diff --git a/netlink.c b/netlink.c
+index eb3a7ca..7991267 100644
+--- a/netlink.c
++++ b/netlink.c
+@@ -78,7 +78,7 @@ netlink_open(void)
+       ** determine maximum number of CPU's for this system
+       ** and specify mask to register all cpu's
+       */
+-      sprintf(cpudef, "0-%d", getnumcpu() -1);
++      snprintf(cpudef, sizeof cpudef, "0-%d", getnumcpu() -1);
+ 
+       /*
+       ** indicate to listen for processes from all CPU's
+diff --git a/photosyst.c b/photosyst.c
+index 860e41d..2f862fd 100644
+--- a/photosyst.c
++++ b/photosyst.c
+@@ -913,8 +913,11 @@ photosyst(struct sstat *si)
+                               ptrverify(lhugepagetot,
+                                       "Malloc failed for huge page total");
+ 
+-                              sprintf(lhugepagetot, "%s/%s/nr_hugepages",
+-                                                      HUGEPAGEDIR, 
dentry->d_name);
++                              snprintf(lhugepagetot,
++                                              sizeof HUGEPAGEDIR + 1 +
++                                              strlen(dentry->d_name) + 1 +
++                                              sizeof "nr_hugepages" + 1,
++                                              "%s/%s/nr_hugepages", 
HUGEPAGEDIR, dentry->d_name);
+ 
+ 
+                               lhugepagefree = malloc(sizeof HUGEPAGEDIR + 1 +
+@@ -924,8 +927,10 @@ photosyst(struct sstat *si)
+                               ptrverify(lhugepagefree,
+                                       "Malloc failed for huge page free");
+ 
+-                              sprintf(lhugepagefree, "%s/%s/free_hugepages",
+-                                                      HUGEPAGEDIR, 
dentry->d_name);
++                              snprintf(lhugepagefree, sizeof HUGEPAGEDIR + 1 
+ 
++                                                      strlen(dentry->d_name) 
+ 1 +
++                                                        sizeof 
"free_hugepages" + 1,
++                                              "%s/%s/free_hugepages", 
HUGEPAGEDIR, dentry->d_name);
+ 
+                               break;
+                       }
+@@ -1065,9 +1070,11 @@ photosyst(struct sstat *si)
+                                       else if ( strcmp("HugePages_Free:", 
nam) == EQ)
+                                               si->memnuma.numa[j].freehp = 
cnts[1];
+                               }
++
+                               fclose(fp);
+                       }
+               }
++
+               closedir(dirp);
+       }
+ 
+diff --git a/showlinux.c b/showlinux.c
+index 5226eb7..3bdf804 100644
+--- a/showlinux.c
++++ b/showlinux.c
+@@ -704,7 +704,7 @@ init_proc_prints(count_t numcpu)
+ 
+                       ptrverify(p, "Malloc failed for formatted header\n");
+ 
+-                      sprintf(p, "%*s", pidwidth, idprocpdefs[i]->head);
++                      snprintf(p, pidwidth+1, "%*s", pidwidth, 
idprocpdefs[i]->head);
+                       idprocpdefs[i]->head = p;
+               }
+       }
+diff --git a/showprocs.c b/showprocs.c
+index 7d56732..b8e5db9 100644
+--- a/showprocs.c
++++ b/showprocs.c
+@@ -418,12 +418,12 @@ showprochead(detail_printpair* elemptr, int curlist, int 
totlist,
+ 
+                 if (screen)
+                 {
+-                        col += sprintf(buf+col, "%*s%s%*s",
++                        col += snprintf(buf+col, bufsz-col, "%*s%s%*s",
+                               widen, autoindic, chead, colspacings[n], "");
+                 }
+                 else
+                 {
+-                        col += sprintf(buf+col, "%s%s ", autoindic, chead);
++                        col += snprintf(buf+col, bufsz-col, "%s%s ", 
autoindic, chead);
+                 }
+                               
+                 elemptr++;
+@@ -432,16 +432,16 @@ showprochead(detail_printpair* elemptr, int curlist, int 
totlist,
+ 
+         if (screen)   // add page number, eat from last header if needed...
+         {
+-                pagindiclen=sprintf(pagindic,"%d/%d", curlist, totlist);
++                pagindiclen=snprintf(pagindic, sizeof pagindic, "%d/%d", 
curlist, totlist);
+                 align=COLS-col-pagindiclen;    // extra spaces needed
+             
+                 if (align >= 0)     // align by adding spaces
+                 {
+-                        sprintf(buf+col, "%*s", align+pagindiclen, pagindic);
++                        snprintf(buf+col, bufsz-col, "%*s", 
align+pagindiclen, pagindic);
+                 }
+                 else if (col+align >= 0)
+                 {    // align by removing from the right
+-                        sprintf(buf+col+align, "%s", pagindic);
++                        snprintf(buf+col+align, bufsz-(col+align), "%s", 
pagindic);
+                 }
+         }
+ 
+@@ -572,9 +572,9 @@ procprt_TID_ae(struct tstat *curstat, int avgval, int 
nsecs)
+         static char buf[64];
+ 
+       if (curstat->gen.isproc)
+-              sprintf(buf, "%*s", procprt_TID.width, "-");
++              snprintf(buf, sizeof buf, "%*s", procprt_TID.width, "-");
+       else
+-              sprintf(buf, "%*d", procprt_TID.width, curstat->gen.pid);
++              snprintf(buf, sizeof buf, "%*d", procprt_TID.width, 
curstat->gen.pid);
+         return buf;
+ }
+ 
+@@ -586,7 +586,7 @@ procprt_PID_a(struct tstat *curstat, int avgval, int nsecs)
+ {
+         static char buf[64];
+ 
+-        sprintf(buf, "%*d", procprt_PID.width, curstat->gen.tgid);
++        snprintf(buf, sizeof buf, "%*d", procprt_PID.width, 
curstat->gen.tgid);
+         return buf;
+ }
+ 
+@@ -596,9 +596,9 @@ procprt_PID_e(struct tstat *curstat, int avgval, int nsecs)
+         static char buf[64];
+ 
+         if (curstat->gen.pid == 0)
+-              sprintf(buf, "%*s", procprt_PID.width, "?");
++              snprintf(buf, sizeof buf, "%*s", procprt_PID.width, "?");
+       else
+-              sprintf(buf, "%*d", procprt_PID.width, curstat->gen.tgid);
++              snprintf(buf, sizeof buf, "%*d", procprt_PID.width, 
curstat->gen.tgid);
+         return buf;
+ }
+ 
+@@ -610,7 +610,7 @@ procprt_PPID_a(struct tstat *curstat, int avgval, int 
nsecs)
+ {
+         static char buf[64];
+ 
+-        sprintf(buf, "%*d", procprt_PPID.width, curstat->gen.ppid);
++        snprintf(buf, sizeof buf, "%*d", procprt_PPID.width, 
curstat->gen.ppid);
+         return buf;
+ }
+ 
+@@ -620,9 +620,9 @@ procprt_PPID_e(struct tstat *curstat, int avgval, int 
nsecs)
+         static char buf[64];
+ 
+       if (curstat->gen.ppid)
+-              sprintf(buf, "%*d", procprt_PPID.width, curstat->gen.ppid);
++              snprintf(buf, sizeof buf, "%*d", procprt_PPID.width, 
curstat->gen.ppid);
+       else
+-              sprintf(buf, "%*s", procprt_PPID.width, "-");
++              snprintf(buf, sizeof buf, "%*s", procprt_PPID.width, "-");
+         return buf;
+ }
+ 
+@@ -634,7 +634,7 @@ procprt_VPID_a(struct tstat *curstat, int avgval, int 
nsecs)
+ {
+         static char buf[64];
+ 
+-        sprintf(buf, "%*d", procprt_VPID.width, curstat->gen.vpid);
++        snprintf(buf, sizeof buf, "%*d", procprt_VPID.width, 
curstat->gen.vpid);
+         return buf;
+ }
+ 
+@@ -643,7 +643,7 @@ procprt_VPID_e(struct tstat *curstat, int avgval, int 
nsecs)
+ {
+         static char buf[64];
+ 
+-      sprintf(buf, "%*s", procprt_VPID.width, "-");
++      snprintf(buf, sizeof buf, "%*s", procprt_VPID.width, "-");
+         return buf;
+ }
+ 
+@@ -655,7 +655,7 @@ procprt_CTID_a(struct tstat *curstat, int avgval, int 
nsecs)
+ {
+         static char buf[32];
+ 
+-        sprintf(buf, "%5d", curstat->gen.ctid);
++        snprintf(buf, sizeof buf, "%5d", curstat->gen.ctid);
+         return buf;
+ }
+ 
+@@ -674,9 +674,9 @@ procprt_CID_a(struct tstat *curstat, int avgval, int nsecs)
+         static char buf[64];
+ 
+       if (curstat->gen.utsname[0])
+-              sprintf(buf, "%-15s", curstat->gen.utsname);
++              snprintf(buf, sizeof buf, "%-15s", curstat->gen.utsname);
+       else
+-              sprintf(buf, "%-15s", "host-----------");
++              snprintf(buf, sizeof buf, "%-15s", "host-----------");
+ 
+         return buf;
+ }
+@@ -687,9 +687,9 @@ procprt_CID_e(struct tstat *curstat, int avgval, int nsecs)
+         static char buf[64];
+ 
+       if (curstat->gen.utsname[0])
+-              sprintf(buf, "%-15s", curstat->gen.utsname);
++              snprintf(buf, sizeof buf, "%-15s", curstat->gen.utsname);
+       else
+-              sprintf(buf, "%-15s", "?");
++              snprintf(buf, sizeof buf, "%-15s", "?");
+ 
+         return buf;
+ }
+@@ -951,7 +951,7 @@ procprt_CMD_a(struct tstat *curstat, int avgval, int nsecs)
+ {
+         static char buf[15];
+ 
+-        sprintf(buf, "%-14.14s", curstat->gen.name);
++        snprintf(buf, sizeof buf, "%-14.14s", curstat->gen.name);
+         return buf;
+ }
+ 
+@@ -961,8 +961,8 @@ procprt_CMD_e(struct tstat *curstat, int avgval, int nsecs)
+         static char buf[15]="<";
+         char        helpbuf[15];
+ 
+-        sprintf(helpbuf, "<%.12s>",  curstat->gen.name);
+-        sprintf(buf,     "%-14.14s", helpbuf);
++        snprintf(helpbuf, sizeof helpbuf, "<%.12s>",  curstat->gen.name);
++        snprintf(buf, sizeof buf,     "%-14.14s", helpbuf);
+         return buf;
+ }
+ 
+@@ -977,7 +977,7 @@ procprt_RUID_ae(struct tstat *curstat, int avgval, int 
nsecs)
+ 
+         if ( (pwd = getpwuid(curstat->gen.ruid)) )
+         {
+-                        sprintf(buf, "%-8.8s", pwd->pw_name);
++                        snprintf(buf, sizeof buf, "%-8.8s", pwd->pw_name);
+         } 
+         else 
+         {
+@@ -997,7 +997,7 @@ procprt_EUID_a(struct tstat *curstat, int avgval, int 
nsecs)
+ 
+         if ( (pwd = getpwuid(curstat->gen.euid)) )
+         {
+-                        sprintf(buf, "%-8.8s", pwd->pw_name);
++                        snprintf(buf, sizeof buf, "%-8.8s", pwd->pw_name);
+         } 
+         else 
+         {
+@@ -1023,7 +1023,7 @@ procprt_SUID_a(struct tstat *curstat, int avgval, int 
nsecs)
+ 
+         if ( (pwd = getpwuid(curstat->gen.suid)) )
+         {
+-                        sprintf(buf, "%-8.8s", pwd->pw_name);
++                        snprintf(buf, sizeof buf, "%-8.8s", pwd->pw_name);
+         } 
+         else 
+         {
+@@ -1049,7 +1049,7 @@ procprt_FSUID_a(struct tstat *curstat, int avgval, int 
nsecs)
+ 
+         if ( (pwd = getpwuid(curstat->gen.fsuid)) )
+         {
+-                        sprintf(buf, "%-8.8s", pwd->pw_name);
++                        snprintf(buf, sizeof buf, "%-8.8s", pwd->pw_name);
+         } 
+         else 
+         {
+@@ -1085,7 +1085,7 @@ procprt_RGID_ae(struct tstat *curstat, int avgval, int 
nsecs)
+                         groupname = grname;
+         }
+ 
+-        sprintf(buf, "%-8.8s", groupname);
++        snprintf(buf, sizeof buf, "%-8.8s", groupname);
+         return buf;
+ }
+ 
+@@ -1110,7 +1110,7 @@ procprt_EGID_a(struct tstat *curstat, int avgval, int 
nsecs)
+                         groupname = grname;
+         }
+ 
+-        sprintf(buf, "%-8.8s", groupname);
++        snprintf(buf, sizeof buf, "%-8.8s", groupname);
+         return buf;
+ }
+ 
+@@ -1141,7 +1141,7 @@ procprt_SGID_a(struct tstat *curstat, int avgval, int 
nsecs)
+                         groupname = grname;
+         }
+ 
+-        sprintf(buf, "%-8.8s", groupname);
++        snprintf(buf, sizeof buf, "%-8.8s", groupname);
+         return buf;
+ }
+ 
+@@ -1172,7 +1172,7 @@ procprt_FSGID_a(struct tstat *curstat, int avgval, int 
nsecs)
+                         groupname = grname;
+         }
+ 
+-        sprintf(buf, "%-8.8s", groupname);
++        snprintf(buf, sizeof buf, "%-8.8s", groupname);
+         return buf;
+ }
+ 
+@@ -1260,7 +1260,7 @@ procprt_THR_a(struct tstat *curstat, int avgval, int 
nsecs)
+ {
+         static char buf[15];
+ 
+-        sprintf(buf, "%4d", curstat->gen.nthr);
++        snprintf(buf, sizeof buf, "%4d", curstat->gen.nthr);
+         return buf;
+ }
+ 
+@@ -1278,7 +1278,7 @@ procprt_TRUN_a(struct tstat *curstat, int avgval, int 
nsecs)
+ {
+         static char buf[15];
+ 
+-        sprintf(buf, "%4d", curstat->gen.nthrrun);
++        snprintf(buf, sizeof buf, "%4d", curstat->gen.nthrrun);
+         return buf;
+ }
+ 
+@@ -1296,7 +1296,7 @@ procprt_TSLPI_a(struct tstat *curstat, int avgval, int 
nsecs)
+ {
+         static char buf[15];
+ 
+-        sprintf(buf, "%5d", curstat->gen.nthrslpi);
++        snprintf(buf, sizeof buf, "%5d", curstat->gen.nthrslpi);
+         return buf;
+ }
+ 
+@@ -1314,7 +1314,7 @@ procprt_TSLPU_a(struct tstat *curstat, int avgval, int 
nsecs)
+ {
+         static char buf[15];
+ 
+-        sprintf(buf, "%5d", curstat->gen.nthrslpu);
++        snprintf(buf, sizeof buf, "%5d", curstat->gen.nthrslpu);
+         return buf;
+ }
+ 
+@@ -1332,7 +1332,7 @@ procprt_TIDLE_a(struct tstat *curstat, int avgval, int 
nsecs)
+ {
+         static char buf[15];
+ 
+-        sprintf(buf, "%5d", curstat->gen.nthridle);
++        snprintf(buf, sizeof buf, "%5d", curstat->gen.nthridle);
+         return buf;
+ }
+ 
+@@ -1397,7 +1397,7 @@ procprt_NICE_a(struct tstat *curstat, int avgval, int 
nsecs)
+ {
+         static char buf[15];
+ 
+-        sprintf(buf, "%4d", curstat->cpu.nice);
++        snprintf(buf, sizeof buf, "%4d", curstat->cpu.nice);
+         return buf;
+ }
+ 
+@@ -1415,7 +1415,7 @@ procprt_PRI_a(struct tstat *curstat, int avgval, int 
nsecs)
+ {
+         static char buf[15];
+ 
+-        sprintf(buf, "%3d", curstat->cpu.prio);
++        snprintf(buf, sizeof buf, "%3d", curstat->cpu.prio);
+         return buf;
+ }
+ 
+@@ -1433,7 +1433,7 @@ procprt_RTPR_a(struct tstat *curstat, int avgval, int 
nsecs)
+ {
+         static char buf[15];
+ 
+-        sprintf(buf, "%4d", curstat->cpu.rtprio);
++        snprintf(buf, sizeof buf, "%4d", curstat->cpu.rtprio);
+         return buf;
+ }
+ 
+@@ -1451,7 +1451,7 @@ procprt_CURCPU_a(struct tstat *curstat, int avgval, int 
nsecs)
+ {
+         static char buf[15];
+ 
+-        sprintf(buf, "%5d", curstat->cpu.curcpu);
++        snprintf(buf, sizeof buf, "%5d", curstat->cpu.curcpu);
+         return buf;
+ }
+ 
+@@ -1520,7 +1520,7 @@ procprt_EXC_e(struct tstat *curstat, int avgval, int 
nsecs)
+         static char buf[4];
+ 
+ 
+-        sprintf(buf, "%3d", 
++        snprintf(buf, sizeof buf, "%3d", 
+                  curstat->gen.excode & 0xff ?
+                           curstat->gen.excode & 0x7f : 
+                           (curstat->gen.excode>>8) & 0xff);
+@@ -1569,9 +1569,9 @@ procprt_COMMAND_LINE_ae(struct tstat *curstat, int 
avgval, int nsecs)
+         int   curoffset  = startoffset <= cmdlen ? startoffset : cmdlen;
+ 
+         if (screen) 
+-                sprintf(buf, "%-*.*s", curwidth, curwidth, pline+curoffset);
++                snprintf(buf, sizeof buf, "%-*.*s", curwidth, curwidth, 
pline+curoffset);
+         else
+-                sprintf(buf, "%.*s", CMDLEN, pline+curoffset);
++                snprintf(buf, sizeof buf, "%.*s", CMDLEN, pline+curoffset);
+ 
+         return buf;
+ }
+@@ -2063,7 +2063,7 @@ format_bandw(char *buf, count_t kbps)
+                 c = 'T';
+         }
+ 
+-        sprintf(buf, "%4lld %cbps", kbps%100000, c);
++        snprintf(buf, bufsize, "%4lld %cbps", kbps%100000, c);
+ }
+ /***************************************************************/
+ char *
+@@ -2356,7 +2356,7 @@ showcgrouphead(detail_printpair *elemptr, int curlist, 
int totlist, char showord
+                 }
+                 else
+                 {
+-                        col += sprintf(buf+col, "%s%s ", "", chead);
++                        col += snprintf(buf+col, sizeof buf-col,"%s%s ", "", 
chead);
+                 }
+                               
+                 elemptr++;
+@@ -2365,7 +2365,7 @@ showcgrouphead(detail_printpair *elemptr, int curlist, 
int totlist, char showord
+ 
+         if (screen)   // add page number, eat from last header if needed...
+         {
+-                pagindiclen = sprintf(pagindic,"%d/%d", curlist, totlist);
++                pagindiclen = snprintf(pagindic, sizeof pagindic, "%d/%d", 
curlist, totlist);
+               move(curline, COLS-pagindiclen);
+                 printg("%s", pagindic);
+         }
+@@ -2492,7 +2492,7 @@ cgroup_CGROUP_PATH(struct cgchainer *cgchain, struct 
tstat *tstat,
+               switch (cgrdepth)
+               {
+                  case 0:
+-                      sprintf(buf, "%-*s", cgroupprt_CGROUP_PATH.width, "/");
++                      snprintf(buf, sizeof buf, "%-*s", 
cgroupprt_CGROUP_PATH.width, "/");
+                       break;
+ 
+                  default:
+@@ -2529,13 +2529,13 @@ cgroup_CGROUP_PATH(struct cgchainer *cgchain, struct 
tstat *tstat,
+                               addch(' ');
+                       }
+ 
+-                      sprintf(buf, " %-*.*s", maxnamelen, maxnamelen,
++                      snprintf(buf, sizeof buf, " %-*.*s", maxnamelen, 
maxnamelen,
+                                               cgrname+curoffset);
+               }
+       }
+         else
+       {
+-                sprintf(buf, "%*s%-*.*s", cgrdepth*2, "",
++                snprintf(buf, sizeof buf, "%*s%-*.*s", cgrdepth*2, "",
+                               cgroupprt_CGROUP_PATH.width - cgrdepth*2,
+                               cgroupprt_CGROUP_PATH.width - cgrdepth*2,
+                               cgrname);
+@@ -2959,9 +2959,9 @@ cgroup_CGRPID(struct cgchainer *cgchain, struct tstat 
*tstat,
+         static char buf[64];
+ 
+       if (tstat)      // process info?
+-              sprintf(buf, "%*d", cgroupprt_CGRPID.width, tstat->gen.pid);
++              snprintf(buf, sizeof buf, "%*d", cgroupprt_CGRPID.width, 
tstat->gen.pid);
+       else            // only cgroup info
+-              sprintf(buf, "%*s", cgroupprt_CGRPID.width, " ");
++              snprintf(buf, sizeof buf, "%*s", cgroupprt_CGRPID.width, " ");
+ 
+         return buf;
+ }
+@@ -2977,18 +2977,18 @@ cgroup_CGRCMD(struct cgchainer *cgchain, struct tstat 
*tstat,
+ 
+       if (tstat)      // process info?
+       {
+-              sprintf(buf, "%-14.14s", tstat->gen.name);
++              snprintf(buf, sizeof buf, "%-14.14s", tstat->gen.name);
+       }
+       else            // cgroup info
+       {
+               if (cgroupdepth == 8 && cgchain->cstat->gen.depth == 0)
+               {
+-                      sprintf(buf, "[suppressed]");
++                      snprintf(buf, sizeof buf, "[suppressed]");
+                       *color = FGCOLORBORDER;
+               }
+               else
+               {
+-                      sprintf(buf, "%-14.14s", " ");
++                      snprintf(buf, sizeof buf, "%-14.14s", " ");
+               }
+       }
+ 
+diff --git a/showsys.c b/showsys.c
+index 0c40198..1d0c837 100644
+--- a/showsys.c
++++ b/showsys.c
+@@ -445,7 +445,7 @@ sysprt_CPUSYS(struct sstat *sstat, extraparam *as, int 
badness, int *color)
+       if (perc > 1.0)
+               *color = -1;
+ 
+-        sprintf(buf, "sys  %6.0f%%", perc);
++        snprintf(buf, sizeof buf, "sys  %6.0f%%", perc);
+         return buf;
+ }
+ 
+@@ -461,7 +461,7 @@ sysprt_CPUUSER(struct sstat *sstat, extraparam *as, int 
badness, int *color)
+       if (perc > 1.0)
+               *color = -1;
+ 
+-        sprintf(buf, "user %6.0f%%", perc);
++        snprintf(buf, sizeof buf, "user %6.0f%%", perc);
+         return buf;
+ }
+ 
+@@ -477,7 +477,7 @@ sysprt_CPUIRQ(struct sstat *sstat, extraparam *as, int 
badness, int *color)
+       if (perc > 1.0)
+               *color = -1;
+ 
+-        sprintf(buf, "irq  %6.0f%%", perc);
++        snprintf(buf, sizeof buf, "irq  %6.0f%%", perc);
+         return buf;
+ }
+ 
+@@ -487,7 +487,7 @@ static char *
+ sysprt_CPUIDLE(struct sstat *sstat, extraparam *as, int badness, int *color) 
+ {
+         static char buf[15];
+-        sprintf(buf, "idle %6.0f%%", 
++        snprintf(buf, sizeof buf, "idle %6.0f%%", 
+                 (sstat->cpu.all.itime * 100.0) / as->percputot);
+         return buf;
+ }
+@@ -498,7 +498,7 @@ static char *
+ sysprt_CPUWAIT(struct sstat *sstat, extraparam *as, int badness, int *color) 
+ {
+         static char buf[15];
+-        sprintf(buf, "wait %6.0f%%", 
++        snprintf(buf, sizeof buf, "wait %6.0f%%", 
+                 (sstat->cpu.all.wtime * 100.0) / as->percputot);
+         return buf;
+ }
+@@ -515,7 +515,7 @@ sysprt_CPUISYS(struct sstat *sstat, extraparam *as, int 
badness, int *color)
+       if (perc > 1.0)
+               *color = -1;
+ 
+-        sprintf(buf, "sys  %6.0f%%", perc);
++        snprintf(buf, sizeof buf, "sys  %6.0f%%", perc);
+         return buf;
+ }
+ 
+@@ -532,7 +532,7 @@ sysprt_CPUIUSER(struct sstat *sstat, extraparam *as, int 
badness, int *color)
+       if (perc > 1.0)
+               *color = -1;
+ 
+-        sprintf(buf, "user %6.0f%%", perc);
++        snprintf(buf, sizeof buf, "user %6.0f%%", perc);
+         return buf;
+ }
+ 
+@@ -549,7 +549,7 @@ sysprt_CPUIIRQ(struct sstat *sstat, extraparam *as, int 
badness, int *color)
+       if (perc > 1.0)
+               *color = -1;
+ 
+-        sprintf(buf, "irq  %6.0f%%", perc);
++        snprintf(buf, sizeof buf, "irq  %6.0f%%", perc);
+         return buf;
+ }
+ 
+@@ -559,7 +559,7 @@ static char *
+ sysprt_CPUIIDLE(struct sstat *sstat, extraparam *as, int badness, int *color) 
+ {
+         static char buf[15];
+-        sprintf(buf, "idle %6.0f%%", 
++        snprintf(buf, sizeof buf, "idle %6.0f%%", 
+                 (sstat->cpu.cpu[as->index].itime * 100.0) / as->percputot);
+         return buf;
+ }
+@@ -570,7 +570,7 @@ static char *
+ sysprt_CPUIWAIT(struct sstat *sstat, extraparam *as, int badness, int *color) 
+ {
+         static char buf[15];
+-        sprintf(buf, "cpu%03d w%3.0f%%", 
++        snprintf(buf, sizeof buf, "cpu%03d w%3.0f%%", 
+                sstat->cpu.cpu[as->index].cpunr,
+                 (sstat->cpu.cpu[as->index].wtime * 100.0) / as->percputot);
+         return buf;
+@@ -638,12 +638,12 @@ dofmt_cpuscale(char *buf, count_t maxfreq, count_t cnt, 
count_t ticks)
+               int     perc = maxfreq ? 100 * curfreq / maxfreq : 0;
+ 
+               strcpy(buf, "avgscal ");
+-              sprintf(buf+7, "%4d%%", perc);
++              snprintf(buf+7, 6, "%4d%%", perc);
+         } 
+         else if (maxfreq)   // max frequency is known so % can be calculated
+         {
+               strcpy(buf, "curscal ");
+-              sprintf(buf+7, "%4lld%%", 100 * cnt / maxfreq);
++              snprintf(buf+7, 6, "%4lld%%", 100 * cnt / maxfreq);
+         }
+       else    // nothing is known: suppress
+       {
+@@ -764,7 +764,7 @@ sysprt_CPUSTEAL(struct sstat *sstat, extraparam *as, int 
badness, int *color)
+       if (perc > 1.0)
+               *color = -1;
+ 
+-        sprintf(buf, "steal %5.0f%%", perc);
++        snprintf(buf, sizeof buf, "steal %5.0f%%", perc);
+         return buf;
+ }
+ 
+@@ -780,7 +780,7 @@ sysprt_CPUISTEAL(struct sstat *sstat, extraparam *as, int 
badness, int *color)
+       if (perc > 1.0)
+               *color = -1;
+ 
+-        sprintf(buf, "steal %5.0f%%", perc);
++        snprintf(buf, sizeof buf, "steal %5.0f%%", perc);
+         return buf;
+ }
+ 
+@@ -795,7 +795,7 @@ sysprt_CPUGUEST(struct sstat *sstat, extraparam *as, int 
badness, int *color)
+       if (perc > 1.0)
+               *color = -1;
+ 
+-        sprintf(buf, "guest %5.0f%%", perc);
++        snprintf(buf, sizeof buf, "guest %5.0f%%", perc);
+         return buf;
+ }
+ 
+@@ -810,7 +810,7 @@ sysprt_CPUIGUEST(struct sstat *sstat, extraparam *as, int 
badness, int *color)
+       if (perc > 1.0)
+               *color = -1;
+ 
+-        sprintf(buf, "guest %5.0f%%", perc);
++        snprintf(buf, sizeof buf, "guest %5.0f%%", perc);
+         return buf;
+ }
+ 
+@@ -825,17 +825,17 @@ sysprt_CPUIPC(struct sstat *sstat, extraparam *as, int 
badness, int *color)
+       switch (sstat->cpu.all.cycle)
+       {
+          case 0:
+-              sprintf(buf, "ipc notavail");
++              snprintf(buf, sizeof buf, "ipc notavail");
+               break;
+ 
+          case 1:
+               *color = FGCOLORINFO;
+-              sprintf(buf, "ipc  initial");
++              snprintf(buf, sizeof buf, "ipc  initial");
+               break;
+ 
+          default:
+               ipc = sstat->cpu.all.instr * 100 / sstat->cpu.all.cycle / 100.0;
+-              sprintf(buf, "ipc %8.2f", ipc);
++              snprintf(buf, sizeof buf, "ipc %8.2f", ipc);
+       }
+ 
+         return buf;
+@@ -858,12 +858,12 @@ sysprt_CPUIIPC(struct sstat *sstat, extraparam *as, int 
badness, int *color)
+       switch (sstat->cpu.all.cycle)
+       {
+          case 0:
+-              sprintf(buf, "ipc notavail");
++              snprintf(buf, sizeof buf, "ipc notavail");
+               break;
+ 
+          case 1:
+               *color = FGCOLORINFO;
+-              sprintf(buf, "ipc  initial");
++              snprintf(buf, sizeof buf, "ipc  initial");
+               break;
+ 
+          default:
+@@ -871,7 +871,7 @@ sysprt_CPUIIPC(struct sstat *sstat, extraparam *as, int 
badness, int *color)
+                       ipc = sstat->cpu.cpu[as->index].instr * 100 /
+                               sstat->cpu.cpu[as->index].cycle / 100.0;
+ 
+-              sprintf(buf, "ipc %8.2f", ipc);
++              snprintf(buf, sizeof buf, "ipc %8.2f", ipc);
+       }
+ 
+         return buf;
+@@ -887,12 +887,12 @@ sysprt_CPUCYCLE(struct sstat *sstat, extraparam *as, int 
badness, int *color)
+       switch (sstat->cpu.all.cycle)
+       {
+          case 0:
+-              sprintf(buf+5, "missing");
++              snprintf(buf+5, sizeof buf-5, "missing");
+               break;
+ 
+          case 1:
+               *color = FGCOLORINFO;
+-              sprintf(buf+5, "initial");
++              snprintf(buf+5, sizeof buf-5, "initial");
+               break;
+ 
+          default:
+@@ -913,12 +913,12 @@ sysprt_CPUICYCLE(struct sstat *sstat, extraparam *as, 
int badness, int *color)
+       switch (sstat->cpu.all.cycle)
+       {
+          case 0:
+-              sprintf(buf+5, "missing");
++              snprintf(buf+5, sizeof buf-5, "missing");
+               break;
+ 
+          case 1:
+               *color = FGCOLORINFO;
+-              sprintf(buf+5, "initial");
++              snprintf(buf+5, sizeof buf-5, "initial");
+               break;
+ 
+          default:
+@@ -938,15 +938,15 @@ sysprt_CPLAVG1(struct sstat *sstat, extraparam *notused, 
int badness, int *color
+ 
+         if (sstat->cpu.lavg1 > 999999.0)
+         {
+-                sprintf(buf+5, ">999999");
++                snprintf(buf+5, sizeof buf-5, ">999999");
+         }
+         else if (sstat->cpu.lavg1 > 999.0)
+         {
+-                sprintf(buf+5, "%7.0f", sstat->cpu.lavg1);
++                snprintf(buf+5, sizeof buf-5, "%7.0f", sstat->cpu.lavg1);
+         }
+         else
+         {
+-                sprintf(buf+5, "%7.2f", sstat->cpu.lavg1);
++                snprintf(buf+5, sizeof buf-5, "%7.2f", sstat->cpu.lavg1);
+         }
+         return buf;
+ }
+@@ -960,15 +960,15 @@ sysprt_CPLAVG5(struct sstat *sstat, extraparam *notused, 
int badness, int *color
+ 
+         if (sstat->cpu.lavg5 > 999999.0)
+         {
+-                sprintf(buf+5, ">999999");
++                snprintf(buf+5, sizeof buf-5, ">999999");
+         }
+         else if (sstat->cpu.lavg5 > 999.0)
+         {
+-                sprintf(buf+5, "%7.0f", sstat->cpu.lavg5);
++                snprintf(buf+5, sizeof buf-5, "%7.0f", sstat->cpu.lavg5);
+         }
+         else
+         {
+-                sprintf(buf+5, "%7.2f", sstat->cpu.lavg5);
++                snprintf(buf+5, sizeof buf-5, "%7.2f", sstat->cpu.lavg5);
+         }
+         return buf;
+ }
+@@ -985,15 +985,15 @@ sysprt_CPLAVG15(struct sstat *sstat, extraparam 
*notused, int badness, int *colo
+ 
+         if (sstat->cpu.lavg15 > 99999.0)
+         {
+-                sprintf(buf+6, ">99999");
++                snprintf(buf+6, sizeof buf-6, ">99999");
+         }
+         else if (sstat->cpu.lavg15 > 999.0)
+         {
+-                sprintf(buf+6, "%6.0f", sstat->cpu.lavg15);
++                snprintf(buf+6, sizeof buf-6, "%6.0f", sstat->cpu.lavg15);
+         }
+         else
+         {
+-                sprintf(buf+6, "%6.2f", sstat->cpu.lavg15);
++                snprintf(buf+6, sizeof buf-6, "%6.2f", sstat->cpu.lavg15);
+         }
+         return buf;
+ }
+@@ -1056,7 +1056,7 @@ sysprt_GPUBUS(struct sstat *sstat, extraparam *as, int 
badness, int *color)
+       else
+               pn = sstat->gpu.gpu[as->index].busid;
+ 
+-        sprintf(buf, "%9.9s %2d", pn, sstat->gpu.gpu[as->index].gpunr);
++        snprintf(buf, sizeof buf, "%9.9s %2d", pn, 
sstat->gpu.gpu[as->index].gpunr);
+         return buf;
+ }
+ 
+@@ -1074,7 +1074,7 @@ sysprt_GPUTYPE(struct sstat *sstat, extraparam *as, int 
badness, int *color)
+       else
+               pn = sstat->gpu.gpu[as->index].type;
+ 
+-        sprintf(buf, "%12.12s", pn);
++        snprintf(buf, sizeof buf, "%12.12s", pn);
+         return buf;
+ }
+ 
+@@ -1099,7 +1099,7 @@ sysprt_GPUMEMPERC(struct sstat *sstat, extraparam *as, 
int badness, int *color)
+ 
+       if (perc == -1)
+       {
+-              sprintf(buf+8, " N/A");
++              snprintf(buf+8, sizeof buf-8, " N/A");
+       }
+       else
+       {
+@@ -1127,7 +1127,7 @@ sysprt_GPUGPUPERC(struct sstat *sstat, extraparam *as, 
int badness, int *color)
+ 
+       if (perc == -1)         // metric not available?
+       {
+-              sprintf(buf+8, " N/A");
++              snprintf(buf+8, sizeof buf-8, " N/A");
+       }
+       else
+       {
+@@ -1835,7 +1835,7 @@ sysprt_NUMANR(struct sstat *sstat, extraparam *as, int 
badness, int *color)
+ {
+       static char buf[16];
+       *color = -1;
+-      sprintf(buf, "numanode%04d", sstat->memnuma.numa[as->index].numanr);
++      snprintf(buf, sizeof buf, "numanode%04d", 
sstat->memnuma.numa[as->index].numanr);
+       return buf;
+ }
+ 
+@@ -1915,7 +1915,7 @@ sysprt_NUMAFRAG(struct sstat *sstat, extraparam *as, int 
badness, int *color)
+       if (perc > 1.0)
+               *color = -1;
+ 
+-      sprintf(buf, "frag %6.0f%%", perc);
++      snprintf(buf, sizeof buf, "frag %6.0f%%", perc);
+       return buf;
+ }
+ 
+@@ -1971,7 +1971,7 @@ sysprt_NUMACPUSYS(struct sstat *sstat, extraparam *as, 
int badness, int *color)
+       if (perc > 1.0)
+               *color = -1;
+ 
+-      sprintf(buf, "sys  %6.0f%%", perc);
++      snprintf(buf, sizeof buf, "sys  %6.0f%%", perc);
+       return buf;
+ }
+ 
+@@ -1986,7 +1986,7 @@ sysprt_NUMACPUUSER(struct sstat *sstat, extraparam *as, 
int badness, int *color)
+       if (perc > 1.0)
+               *color = -1;
+ 
+-      sprintf(buf, "user %6.0f%%", perc);
++      snprintf(buf, sizeof buf, "user %6.0f%%", perc);
+       return buf;
+ }
+ 
+@@ -2001,7 +2001,7 @@ sysprt_NUMACPUNICE(struct sstat *sstat, extraparam *as, 
int badness, int *color)
+       if (perc > 1.0)
+               *color = -1;
+ 
+-      sprintf(buf, "nice %6.0f%%", perc);
++      snprintf(buf, sizeof buf, "nice %6.0f%%", perc);
+       return buf;
+ }
+ 
+@@ -2016,7 +2016,7 @@ sysprt_NUMACPUIRQ(struct sstat *sstat, extraparam *as, 
int badness, int *color)
+       if (perc > 1.0)
+               *color = -1;
+ 
+-      sprintf(buf, "irq  %6.0f%%", perc);
++      snprintf(buf, sizeof buf, "irq  %6.0f%%", perc);
+       return buf;
+ }
+ 
+@@ -2031,7 +2031,7 @@ sysprt_NUMACPUSOFTIRQ(struct sstat *sstat, extraparam 
*as, int badness, int *col
+       if (perc > 1.0)
+               *color = -1;
+ 
+-      sprintf(buf, "sirq %6.0f%%", perc);
++      snprintf(buf, sizeof buf, "sirq %6.0f%%", perc);
+       return buf;
+ }
+ 
+@@ -2042,7 +2042,7 @@ sysprt_NUMACPUIDLE(struct sstat *sstat, extraparam *as, 
int badness, int *color)
+ {
+       static char buf[15];
+ 
+-      sprintf(buf, "idle %6.0f%%",
++      snprintf(buf, sizeof buf, "idle %6.0f%%",
+               (sstat->cpunuma.numa[as->index].itime * 100.0) / as->percputot);
+       return buf;
+ }
+@@ -2054,7 +2054,7 @@ sysprt_NUMACPUWAIT(struct sstat *sstat, extraparam *as, 
int badness, int *color)
+ {
+       static char buf[15];
+ 
+-      sprintf(buf, "nod%03d w%3.0f%%",
++      snprintf(buf, sizeof buf, "nod%03d w%3.0f%%",
+               sstat->cpunuma.numa[as->index].numanr,
+               (sstat->cpunuma.numa[as->index].wtime * 100.0) / as->percputot);
+       return buf;
+@@ -2072,7 +2072,7 @@ sysprt_NUMACPUSTEAL(struct sstat *sstat, extraparam *as, 
int badness, int *color
+       if (perc > 1.0)
+               *color = -1;
+ 
+-      sprintf(buf, "steal %5.0f%%", perc);
++      snprintf(buf, sizeof buf, "steal %5.0f%%", perc);
+       return buf;
+ }
+ 
+@@ -2088,7 +2088,7 @@ sysprt_NUMACPUGUEST(struct sstat *sstat, extraparam *as, 
int badness, int *color
+       if (perc > 1.0)
+               *color = -1;
+ 
+-      sprintf(buf, "guest %5.0f%%", perc);
++      snprintf(buf, sizeof buf, "guest %5.0f%%", perc);
+       return buf;
+ }
+ 
+@@ -2122,7 +2122,7 @@ sysprt_NUMLLC(struct sstat *sstat, extraparam *as, int 
badness, int *color)
+       static char buf[16];
+ 
+       *color = -1;
+-      sprintf(buf, "LLC%02d %5.0f%%", sstat->llc.perllc[as->index].id, 
sstat->llc.perllc[as->index].occupancy * 100);
++      snprintf(buf, sizeof buf, "LLC%02d %5.0f%%", 
sstat->llc.perllc[as->index].id, sstat->llc.perllc[as->index].occupancy * 100);
+       return buf;
+ }
+ 
+@@ -2278,7 +2278,7 @@ sysprt_CONTNAME(struct sstat *sstat, extraparam *as, int 
badness, int *color)
+ 
+       *color = -1;
+ 
+-        sprintf(buf+5, "%7lu", sstat->cfs.cont[as->index].ctid);
++        snprintf(buf+5, sizeof buf-5, "%7lu", 
sstat->cfs.cont[as->index].ctid);
+         return buf;
+ }
+ 
+@@ -2313,10 +2313,10 @@ sysprt_CONTCPU(struct sstat *sstat, extraparam *as, 
int badness, int *color)
+       if (sstat->cfs.cont[as->index].uptime)
+       {
+               perc = used * 100.0 / sstat->cfs.cont[as->index].uptime;
+-              sprintf(buf, "cpubusy %3.0f%%", perc);
++              snprintf(buf, sizeof buf, "cpubusy %3.0f%%", perc);
+       }
+       else
+-              sprintf(buf, "cpubusy   ?%%");
++              snprintf(buf, sizeof buf, "cpubusy   ?%%");
+ 
+         return buf;
+ }
+@@ -2351,7 +2351,7 @@ sysprt_DSKNAME(struct sstat *sstat, extraparam *as, int 
badness, int *color)
+       else
+               pn = as->perdsk[as->index].name;
+ 
+-        sprintf(buf, "%12.12s", pn);
++        snprintf(buf, sizeof buf, "%12.12s", pn);
+         return buf;
+ }
+ 
+@@ -2368,9 +2368,9 @@ sysprt_DSKBUSY(struct sstat *sstat, extraparam *as, int 
badness, int *color)
+       perc = as->perdsk[as->index].io_ms * 100.0 / as->mstot;
+ 
+       if (perc >= 0.0 && perc < 1000000.0)
+-              sprintf(buf+5, "%6.0lf%%", perc);
++              snprintf(buf+5, sizeof buf-5, "%6.0lf%%", perc);
+       else
+-              sprintf(buf+5, "%6.0lf%%", 999999.0);
++              snprintf(buf+5, sizeof buf-5, "%6.0lf%%", 999999.0);
+ 
+         return buf;
+ }
+@@ -2517,7 +2517,7 @@ sysprt_DSKAVQUEUE(struct sstat *sstat, extraparam *as, 
int badness, int *color)
+         static char   buf[16]="avq  ";
+       struct perdsk   *dp = &(as->perdsk[as->index]);
+ 
+-      sprintf(buf+4, "%8.2f", dp->io_ms > 0 ?
++      snprintf(buf+4, sizeof buf-4, "%8.2f", dp->io_ms > 0 ?
+                                 (double)dp->avque / dp->io_ms : 0.0);
+         return buf;
+ }
+@@ -2536,31 +2536,31 @@ sysprt_DSKAVIO(struct sstat *sstat, extraparam *as, 
int badness, int *color)
+       if (avioms >= 9995.0)
+       {
+               val2valstr((unsigned long long)avioms / 1000, buf+5, 5, 0, 0);
+-              sprintf(buf+10, " s");
++              snprintf(buf+10, sizeof buf-10, " s");
+       }
+       else if (avioms >= 99.95)
+       {
+-              sprintf(buf+5, "%4.0lf ms", avioms);
++              snprintf(buf+5, sizeof buf-5, "%4.0lf ms", avioms);
+       }
+       else if (avioms >= 9.995)
+       {
+-              sprintf(buf+5, "%4.1lf ms", avioms);
++              snprintf(buf+5, sizeof buf-5, "%4.1lf ms", avioms);
+       }
+       else if (avioms >= 0.09995)
+       {
+-              sprintf(buf+5, "%4.2lf ms", avioms);
++              snprintf(buf+5, sizeof buf-5, "%4.2lf ms", avioms);
+       }
+       else if (avioms >= 0.01)
+       {
+-              sprintf(buf+5, "%4.1lf µs", avioms * 1000.0);
++              snprintf(buf+5, sizeof buf-5, "%4.1lf µs", avioms * 1000.0);
+       }
+       else if (avioms >= 0.0001)
+       {
+-              sprintf(buf+5, "%4.2lf µs", avioms * 1000.0);
++              snprintf(buf+5, sizeof buf-5, "%4.2lf µs", avioms * 1000.0);
+       }
+       else
+       {
+-              sprintf(buf+5, "%4.1lf ns", avioms * 1000000.0);
++              snprintf(buf+5, sizeof buf-5, "%4.1lf ns", avioms * 1000000.0);
+       }
+ 
+         return buf;
+@@ -3183,7 +3183,7 @@ sysprt_NFMSERVER(struct sstat *sstat, extraparam *as, 
int badness, int *color)
+       else
+               strcpy(mntdev, "?");
+ 
+-      sprintf(buf+4, "%8.8s", mntdev);
++      snprintf(buf+4, sizeof buf-4, "%8.8s", mntdev);
+         return buf;
+ }
+ 
+@@ -3208,7 +3208,7 @@ sysprt_NFMPATH(struct sstat *sstat, extraparam *as, int 
badness, int *color)
+         if (len > 12)
+               ps = ps + len - 12;
+ 
+-      sprintf(buf, "%12.12s", ps);
++      snprintf(buf, sizeof buf, "%12.12s", ps);
+         return buf;
+ }
+ 
+@@ -3458,7 +3458,7 @@ sysprt_NFSNRBYTES(struct sstat *sstat, extraparam *as, 
int badness, int *color)
+ {
+         static char   buf[32]="MBcr/s ";
+ 
+-        sprintf(buf+7, "%5.1lf",
++        snprintf(buf+7, sizeof buf-7, "%5.1lf",
+               sstat->nfs.server.nrbytes / 1024.0 / 1024.0 / as->nsecs);
+ 
+         return buf;
+@@ -3471,7 +3471,7 @@ sysprt_NFSNWBYTES(struct sstat *sstat, extraparam *as, 
int badness, int *color)
+ {
+         static char   buf[32]="MBcw/s ";
+ 
+-        sprintf(buf+7, "%5.1lf",
++        snprintf(buf+7, sizeof buf-7, "%5.1lf",
+               sstat->nfs.server.nwbytes / 1024.0 / 1024.0 / as->nsecs);
+ 
+         return buf;
diff -Nru 
atop-2.11.1/debian/patches/0017-new-parameter-for-formatr_bandw-to-get-rid-of-sprint.patch
 
atop-2.11.1/debian/patches/0017-new-parameter-for-formatr_bandw-to-get-rid-of-sprint.patch
--- 
atop-2.11.1/debian/patches/0017-new-parameter-for-formatr_bandw-to-get-rid-of-sprint.patch
  1970-01-01 01:00:00.000000000 +0100
+++ 
atop-2.11.1/debian/patches/0017-new-parameter-for-formatr_bandw-to-get-rid-of-sprint.patch
  2025-05-28 18:07:22.000000000 +0200
@@ -0,0 +1,68 @@
+From: Marc Haber <mh+debian-packa...@zugschlus.de>
+Date: Sun, 25 May 2025 21:05:01 +0200
+Subject: new parameter for formatr_bandw to get rid of sprintf
+
+Author: Gerlof Langeveld
+Forwarded: not-needed
+---
+ showprocs.c | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/showprocs.c b/showprocs.c
+index b8e5db9..c1cda01 100644
+--- a/showprocs.c
++++ b/showprocs.c
+@@ -60,7 +60,7 @@
+ #include "showgeneric.h"
+ #include "showlinux.h"
+ 
+-static void   format_bandw(char *, count_t);
++static void   format_bandw(char *, int, count_t);
+ static void   gettotwidth(detail_printpair *, int *, int *, int *);
+ static int    *getspacings(detail_printpair *);
+ 
+@@ -1986,7 +1986,7 @@ procprt_BANDWI_a(struct tstat *curstat, int avgval, int 
nsecs)
+         static char buf[16];
+       count_t     rkbps = (curstat->net.tcprsz+curstat->net.udprsz)/125/nsecs;
+ 
+-      format_bandw(buf, rkbps);
++      format_bandw(buf, sizeof buf, rkbps);
+         return buf;
+ }
+ 
+@@ -1999,7 +1999,7 @@ procprt_BANDWI_e(struct tstat *curstat, int avgval, int 
nsecs)
+               count_t     rkbps = (curstat->net.tcprsz + curstat->net.udprsz)
+                                                               /125/nsecs;
+ 
+-              format_bandw(buf, rkbps);
++              format_bandw(buf, sizeof buf, rkbps);
+               return buf;
+       }
+       else
+@@ -2015,7 +2015,7 @@ procprt_BANDWO_a(struct tstat *curstat, int avgval, int 
nsecs)
+         static char buf[16];
+       count_t     skbps = (curstat->net.tcpssz+curstat->net.udpssz)/125/nsecs;
+ 
+-      format_bandw(buf, skbps);
++      format_bandw(buf, sizeof buf, skbps);
+         return buf;
+ }
+ 
+@@ -2028,7 +2028,7 @@ procprt_BANDWO_e(struct tstat *curstat, int avgval, int 
nsecs)
+               count_t     skbps = (curstat->net.tcpssz + curstat->net.udpssz)
+                                                               /125/nsecs;
+ 
+-              format_bandw(buf, skbps);
++              format_bandw(buf, sizeof buf, skbps);
+                       return buf;
+       }
+       else
+@@ -2039,7 +2039,7 @@ detail_printdef procprt_BANDWO =
+    { "   BANDWO", "BANDWO", procprt_BANDWO_a, procprt_BANDWO_e, ' ', 9};
+ /***************************************************************/
+ static void
+-format_bandw(char *buf, count_t kbps)
++format_bandw(char *buf, int bufsize, count_t kbps)
+ {
+       char        c;
+ 
diff -Nru 
atop-2.11.1/debian/patches/0018-fix-buffer-overflow-crash-on-Raspberry-Pi-5-fake-NUM.patch
 
atop-2.11.1/debian/patches/0018-fix-buffer-overflow-crash-on-Raspberry-Pi-5-fake-NUM.patch
--- 
atop-2.11.1/debian/patches/0018-fix-buffer-overflow-crash-on-Raspberry-Pi-5-fake-NUM.patch
  1970-01-01 01:00:00.000000000 +0100
+++ 
atop-2.11.1/debian/patches/0018-fix-buffer-overflow-crash-on-Raspberry-Pi-5-fake-NUM.patch
  2025-05-28 18:07:22.000000000 +0200
@@ -0,0 +1,125 @@
+From: Marc Haber <mh+debian-packa...@zugschlus.de>
+Date: Sun, 25 May 2025 21:05:56 +0200
+Subject: fix buffer overflow crash on Raspberry Pi 5 (fake NUMA architecture)
+
+Closes: #1106234
+Thanks: Gerlof Langeveld
+Author: Gerlof Langeveld
+Forwarded: not-needed
+---
+ photosyst.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++
+ photosyst.h |  1 +
+ showlinux.c | 12 ++++++++----
+ 3 files changed, 60 insertions(+), 4 deletions(-)
+
+diff --git a/photosyst.c b/photosyst.c
+index 2f862fd..5670393 100644
+--- a/photosyst.c
++++ b/photosyst.c
+@@ -2646,6 +2646,57 @@ get_ksm(struct sstat *si)
+ }
+ 
+ 
++/*
++** determine if this system uses *real* NUMA rather than *fake* NUMA
++** that is the case when not all node distances have the same value
++*/
++#define       NUMADISTANCE0   "/sys/devices/system/node/node0/distance"
++
++int
++uses_realnuma(void)
++{
++      static int      realnuma = -1;
++      FILE            *fp;
++      int             i, total, nr=0, dist[10];
++      char            linebuf[1024];
++
++      if (realnuma == -1)     // first call?
++      {
++              if ( (fp = fopen(NUMADISTANCE0, "r")) != NULL)
++              {
++                      if ( fgets(linebuf, sizeof(linebuf), fp) != NULL)
++                      {
++                              nr = sscanf(linebuf, "%d %d %d %d %d %d %d %d 
%d %d",
++                                      &dist[0], &dist[1], &dist[2], &dist[3],
++                                      &dist[4], &dist[5], &dist[6], &dist[7],
++                                      &dist[8], &dist[9]);
++                      }
++
++                      fclose(fp);
++              }
++
++              if (nr <= 0)
++              {
++                      realnuma = 0;   // probably fake NUMA
++              }
++              else
++              {
++                      // totalize all distances
++                      for (i=0, total=0; i < nr; i++)
++                              total += dist[i];
++
++                      // average distance not equal to the first distance?
++                      if (total / i != dist[0])
++                              realnuma = 1;   // real NUMA
++                      else
++                              realnuma = 0;   // fake NUMA
++              }
++      }
++
++      return realnuma;
++}
++
++
+ #if   HTTPSTATS
+ /*
+ ** retrieve statistics from local HTTP daemons
+diff --git a/photosyst.h b/photosyst.h
+index 600fb36..ebe4115 100644
+--- a/photosyst.h
++++ b/photosyst.h
+@@ -468,6 +468,7 @@ void       deviatsyst(struct sstat *, struct sstat *, 
struct sstat *, long);
+ void  totalsyst (char,           struct sstat *, struct sstat *);
+ void  do_perfevents(char *, char *);
+ int     isdisk_major(unsigned int);
++int   uses_realnuma(void);
+ 
+ /*
+ ** return value of isdisk_...()
+diff --git a/showlinux.c b/showlinux.c
+index 3bdf804..817e967 100644
+--- a/showlinux.c
++++ b/showlinux.c
+@@ -1969,7 +1969,7 @@ prisyst(struct sstat *sstat, int curline, int nsecs, int 
avgval,
+       /*
+       ** memory info related for per NUMA
+       */
+-      if (sstat->memnuma.nrnuma > 1)
++      if (sstat->memnuma.nrnuma > 1 && uses_realnuma())
+       {
+               for (extra.index=lin=0;
+                    extra.index < sstat->memnuma.nrnuma && lin < maxnumalines;
+@@ -2005,7 +2005,7 @@ prisyst(struct sstat *sstat, int curline, int nsecs, int 
avgval,
+       /*
+       ** Accumulate each cpu statistic for per NUMA
+       */
+-      if (sstat->cpunuma.nrnuma > 1)
++      if (sstat->cpunuma.nrnuma > 1 && uses_realnuma())
+       {
+               for (extra.index=lin=0;
+                    extra.index < sstat->cpunuma.nrnuma && lin < maxnumalines;
+@@ -2045,8 +2045,12 @@ prisyst(struct sstat *sstat, int curline, int nsecs, 
int avgval,
+                               *highorderp = MSORTCPU;
+                       }
+ 
+-                      extra.percputot = extra.pernumacputot /
+-                                              
(sstat->cpu.nrcpu/sstat->cpunuma.nrnuma);
++                      if (sstat->cpunuma.numa[extra.index].nrcpu)
++                              extra.percputot = extra.pernumacputot /
++                                      sstat->cpunuma.numa[extra.index].nrcpu;
++                      else
++                              extra.percputot = 1;
++
+                       if (extra.percputot == 0)
+                               extra.percputot = 1; /* avoid divide-by-zero */
+ 
diff -Nru atop-2.11.1/debian/patches/atopacct.service.patch 
atop-2.11.1/debian/patches/atopacct.service.patch
--- atop-2.11.1/debian/patches/atopacct.service.patch   2025-05-04 
18:41:13.000000000 +0200
+++ atop-2.11.1/debian/patches/atopacct.service.patch   2025-05-28 
18:07:22.000000000 +0200
@@ -1,7 +1,15 @@
-Description: adapt upstreams service file to Debian
-Author: Marc Haber <mh+debian-packa...@zugschlus.de>
+From: Marc Haber <mh+debian-packa...@zugschlus.de>
+Date: Sun, 25 May 2025 20:54:51 +0200
+Subject: adapt upstreams service file to Debian
+
 Forwarded: not-needed
 Last-Update: 2016-08-07
+---
+ atopacct.service | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/atopacct.service b/atopacct.service
+index 3aa529d..cab54ae 100644
 --- a/atopacct.service
 +++ b/atopacct.service
 @@ -1,6 +1,7 @@
diff -Nru atop-2.11.1/debian/patches/atop-pm.patch 
atop-2.11.1/debian/patches/atop-pm.patch
--- atop-2.11.1/debian/patches/atop-pm.patch    2025-05-04 18:41:13.000000000 
+0200
+++ atop-2.11.1/debian/patches/atop-pm.patch    2025-05-28 18:07:22.000000000 
+0200
@@ -1,7 +1,16 @@
-Description: install atop-pm to /etc/systemd/system-sleep/atop-pm
-Author: Marc Haber <mh+debian-packa...@zugschlus.de>
+From: Marc Haber <mh+debian-packa...@zugschlus.de>
+Date: Sun, 25 May 2025 20:54:51 +0200
+Subject: install atop-pm to /etc/systemd/system-sleep/atop-pm
+
 Forwarded: not-needed
 Last-Update: 2016-10-25
+---
+ Makefile   | 6 +++---
+ atop-pm.sh | 6 ++++--
+ 2 files changed, 7 insertions(+), 5 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 8e5da0e..6cba06c 100644
 --- a/Makefile
 +++ b/Makefile
 @@ -18,7 +18,7 @@ CRNPATH  = /etc/cron.d
@@ -24,6 +33,8 @@
                #
                # only when making on target system:
                #
+diff --git a/atop-pm.sh b/atop-pm.sh
+index 3ff4ab5..1ccb14f 100755
 --- a/atop-pm.sh
 +++ b/atop-pm.sh
 @@ -1,10 +1,12 @@
diff -Nru atop-2.11.1/debian/patches/atop-rotate-systemctl-path.patch 
atop-2.11.1/debian/patches/atop-rotate-systemctl-path.patch
--- atop-2.11.1/debian/patches/atop-rotate-systemctl-path.patch 2025-05-04 
18:41:13.000000000 +0200
+++ atop-2.11.1/debian/patches/atop-rotate-systemctl-path.patch 2025-05-28 
18:07:22.000000000 +0200
@@ -1,7 +1,15 @@
-Description: systemctl is in /bin on Debian
-Author: Marc Haber <mh+debian-packa...@zugschlus.de>
+From: Marc Haber <mh+debian-packa...@zugschlus.de>
+Date: Sun, 25 May 2025 20:54:51 +0200
+Subject: systemctl is in /bin on Debian
+
 Forwarded: not-needed
 Last-Update: 2022-08-10
+---
+ atop-rotate.service | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/atop-rotate.service b/atop-rotate.service
+index dbe8e0f..3753977 100644
 --- a/atop-rotate.service
 +++ b/atop-rotate.service
 @@ -4,4 +4,4 @@ Documentation=man:atop(1)
diff -Nru atop-2.11.1/debian/patches/default.patch 
atop-2.11.1/debian/patches/default.patch
--- atop-2.11.1/debian/patches/default.patch    2025-05-04 18:41:13.000000000 
+0200
+++ atop-2.11.1/debian/patches/default.patch    2025-05-28 18:07:22.000000000 
+0200
@@ -1,7 +1,15 @@
-Description: create Debian's atop.default file as patched from Upstream's
-Author: Marc Haber <mh+debian-packa...@zugschlus.de>
+From: Marc Haber <mh+debian-packa...@zugschlus.de>
+Date: Sun, 25 May 2025 20:54:51 +0200
+Subject: create Debian's atop.default file as patched from Upstream's
+
 Forwarded: not-needed
 Last-Update: 2019-02-17
+---
+ atop.default | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/atop.default b/atop.default
+index 18ebdf4..e5ab6bd 100644
 --- a/atop.default
 +++ b/atop.default
 @@ -1,3 +1,6 @@
diff -Nru atop-2.11.1/debian/patches/dh_installinit.patch 
atop-2.11.1/debian/patches/dh_installinit.patch
--- atop-2.11.1/debian/patches/dh_installinit.patch     2025-05-04 
18:41:13.000000000 +0200
+++ atop-2.11.1/debian/patches/dh_installinit.patch     2025-05-28 
18:07:22.000000000 +0200
@@ -1,7 +1,15 @@
-Description: do not install init scripts directly
-Author: Marc Haber <mh+debian-packa...@zugschlus.de>
+From: Marc Haber <mh+debian-packa...@zugschlus.de>
+Date: Sun, 25 May 2025 20:54:51 +0200
+Subject: do not install init scripts directly
+
 Forwarded: not-needed
 Last-Update: 2016-08-07
+---
+ Makefile | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index cb27833..5a57d8d 100644
 --- a/Makefile
 +++ b/Makefile
 @@ -98,8 +98,6 @@ sysvinstall: genericinstall
diff -Nru atop-2.11.1/debian/patches/dh_systemd_enable.patch 
atop-2.11.1/debian/patches/dh_systemd_enable.patch
--- atop-2.11.1/debian/patches/dh_systemd_enable.patch  2025-05-04 
18:41:13.000000000 +0200
+++ atop-2.11.1/debian/patches/dh_systemd_enable.patch  2025-05-28 
18:07:22.000000000 +0200
@@ -1,7 +1,15 @@
-Description: do not install atop.service and atopacct.service
-Author: Marc Haber <mh+debian-packa...@zugschlus.de>
+From: Marc Haber <mh+debian-packa...@zugschlus.de>
+Date: Sun, 25 May 2025 20:54:51 +0200
+Subject: do not install atop.service and atopacct.service
+
 Forwarded: not-needed
 Last-Update: 2016-08-07
+---
+ Makefile | 6 ------
+ 1 file changed, 6 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index fd7ad92..cb27833 100644
 --- a/Makefile
 +++ b/Makefile
 @@ -67,16 +67,10 @@ install:   genericinstall
diff -Nru atop-2.11.1/debian/patches/disable-mkdate.patch 
atop-2.11.1/debian/patches/disable-mkdate.patch
--- atop-2.11.1/debian/patches/disable-mkdate.patch     2025-05-04 
18:41:13.000000000 +0200
+++ atop-2.11.1/debian/patches/disable-mkdate.patch     2025-05-28 
18:07:22.000000000 +0200
@@ -1,7 +1,16 @@
-Description: disable mkdate, keep versdate.h at original
-  this is supposed to help with reproducibility
-Author: Marc Haber <mh+debian-packa...@zugschlus.de>
+From: Marc Haber <mh+debian-packa...@zugschlus.de>
+Date: Sun, 25 May 2025 20:54:51 +0200
+Subject: disable mkdate, keep versdate.h at original
+
 Forwarded: not-needed
+
+ this is supposed to help with reproducibility
+---
+ Makefile | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 3a63f69..fd7ad92 100644
 --- a/Makefile
 +++ b/Makefile
 @@ -53,7 +53,7 @@ atophide:    atophide.o
@@ -13,7 +22,7 @@
  
  distr:
                rm -f *.o atop
-@@ -187,7 +187,7 @@ genericinstall:    atop atopacctd atopconve
+@@ -187,7 +187,7 @@ genericinstall:    atop atopacctd atopconvert atopcat 
atophide
  ##########################################################################
  
  versdate.h:
diff -Nru atop-2.11.1/debian/patches/force-reload.patch 
atop-2.11.1/debian/patches/force-reload.patch
--- atop-2.11.1/debian/patches/force-reload.patch       2025-05-04 
18:41:13.000000000 +0200
+++ atop-2.11.1/debian/patches/force-reload.patch       2025-05-28 
18:07:22.000000000 +0200
@@ -1,7 +1,17 @@
-Description: force-reload is required, and restart|force-reload should not be 
a no-op
-Author: Marc Haber <mh+debian-packa...@zugschlus.de>
+From: Marc Haber <mh+debian-packa...@zugschlus.de>
+Date: Sun, 25 May 2025 20:54:51 +0200
+Subject: force-reload is required,
+ and restart|force-reload should not be a no-op
+
 Forwarded: not-needed
 Last-Update: 2016-08-07
+---
+ atop.init     | 2 +-
+ atopacct.init | 4 +++-
+ 2 files changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/atop.init b/atop.init
+index eec2401..be60584 100755
 --- a/atop.init
 +++ b/atop.init
 @@ -71,7 +71,7 @@ case "$1" in
@@ -13,6 +23,8 @@
        /usr/share/atop/atop.daily&
        ;;
  
+diff --git a/atopacct.init b/atopacct.init
+index a57615a..668d902 100755
 --- a/atopacct.init
 +++ b/atopacct.init
 @@ -77,7 +77,9 @@ case "$1" in
diff -Nru atop-2.11.1/debian/patches/handle-default-file.patch 
atop-2.11.1/debian/patches/handle-default-file.patch
--- atop-2.11.1/debian/patches/handle-default-file.patch        2025-05-04 
18:41:13.000000000 +0200
+++ atop-2.11.1/debian/patches/handle-default-file.patch        2025-05-28 
18:07:22.000000000 +0200
@@ -1,10 +1,18 @@
-Description: Debian packaging handles /etc/defaults file itself
-Author: Marc Haber <mh+debian-packa...@zugschlus.de>
+From: Marc Haber <mh+debian-packa...@zugschlus.de>
+Date: Sun, 25 May 2025 20:54:51 +0200
+Subject: Debian packaging handles /etc/defaults file itself
+
 Forwarded: not-needed
 Last-Update: 2020-11-19
+---
+ Makefile | 3 ---
+ 1 file changed, 3 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 2a01e9a..1250f70 100644
 --- a/Makefile
 +++ b/Makefile
-@@ -147,9 +147,6 @@ genericinstall:    atop atopacctd atopconve
+@@ -147,9 +147,6 @@ genericinstall:    atop atopacctd atopconvert atopcat 
atophide
                if [ ! -d $(DESTDIR)$(MAN8PATH) ];              \
                then    mkdir -p $(DESTDIR)$(MAN8PATH); fi
                #
diff -Nru atop-2.11.1/debian/patches/init-script-lsb-headers.patch 
atop-2.11.1/debian/patches/init-script-lsb-headers.patch
--- atop-2.11.1/debian/patches/init-script-lsb-headers.patch    2025-05-04 
18:41:13.000000000 +0200
+++ atop-2.11.1/debian/patches/init-script-lsb-headers.patch    2025-05-28 
18:07:22.000000000 +0200
@@ -1,7 +1,15 @@
-Description: Short-Description and Description were swapped
-Author: Marc Haber <mh+debian-packa...@zugschlus.de>
+From: Marc Haber <mh+debian-packa...@zugschlus.de>
+Date: Sun, 25 May 2025 20:54:51 +0200
+Subject: Short-Description and Description were swapped
+
 Forwarded: not-needed
 Last-Update: 2016-08-07
+---
+ atopacct.init | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/atopacct.init b/atopacct.init
+index c681f55..a57615a 100755
 --- a/atopacct.init
 +++ b/atopacct.init
 @@ -11,10 +11,10 @@
diff -Nru atop-2.11.1/debian/patches/lsb-init-functions.patch 
atop-2.11.1/debian/patches/lsb-init-functions.patch
--- atop-2.11.1/debian/patches/lsb-init-functions.patch 2025-05-04 
18:41:13.000000000 +0200
+++ atop-2.11.1/debian/patches/lsb-init-functions.patch 2025-05-28 
18:07:22.000000000 +0200
@@ -1,7 +1,16 @@
-Description: call isb/init-functions for systemd compatibility
-Author: Marc Haber <mh+debian-packa...@zugschlus.de>
+From: Marc Haber <mh+debian-packa...@zugschlus.de>
+Date: Sun, 25 May 2025 20:54:51 +0200
+Subject: call isb/init-functions for systemd compatibility
+
 Forwarded: not-needed
 Last-Update: 2016-08-07
+---
+ atop.init     | 2 ++
+ atopacct.init | 2 ++
+ 2 files changed, 4 insertions(+)
+
+diff --git a/atop.init b/atop.init
+index 8109457..eec2401 100755
 --- a/atop.init
 +++ b/atop.init
 @@ -15,6 +15,8 @@
@@ -13,6 +22,8 @@
  # Check existance of binaries 
  [ -f /usr/bin/atop ] || exit 0
  
+diff --git a/atopacct.init b/atopacct.init
+index e4d06a8..c681f55 100755
 --- a/atopacct.init
 +++ b/atopacct.init
 @@ -17,6 +17,8 @@
diff -Nru atop-2.11.1/debian/patches/no-atopgpud.patch 
atop-2.11.1/debian/patches/no-atopgpud.patch
--- atop-2.11.1/debian/patches/no-atopgpud.patch        2025-05-04 
18:41:13.000000000 +0200
+++ atop-2.11.1/debian/patches/no-atopgpud.patch        2025-05-28 
18:07:22.000000000 +0200
@@ -1,10 +1,18 @@
-Description: do not install atopgpud
-Author: Marc Haber <mh+debian-packa...@zugschlus.de>
+From: Marc Haber <mh+debian-packa...@zugschlus.de>
+Date: Sun, 25 May 2025 20:54:51 +0200
+Subject: do not install atopgpud
+
 Forwarded: not-needed
 Last-Update: 2019-01-18
+---
+ Makefile | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 6cba06c..2a01e9a 100644
 --- a/Makefile
 +++ b/Makefile
-@@ -155,8 +155,8 @@ genericinstall:    atop atopacctd atopconve
+@@ -155,8 +155,8 @@ genericinstall:    atop atopacctd atopconvert atopcat 
atophide
                ln -sf atop             $(DESTDIR)$(BINPATH)/atopsar
                cp atopacctd            $(DESTDIR)$(SBINPATH)/atopacctd
                chmod 0700              $(DESTDIR)$(SBINPATH)/atopacctd
@@ -15,7 +23,7 @@
                cp atopconvert          $(DESTDIR)$(BINPATH)/atopconvert
                chmod 0711              $(DESTDIR)$(BINPATH)/atopconvert
                cp atopcat              $(DESTDIR)$(BINPATH)/atopcat
-@@ -170,7 +170,7 @@ genericinstall:    atop atopacctd atopconve
+@@ -170,7 +170,7 @@ genericinstall:    atop atopacctd atopconvert atopcat 
atophide
                cp man/atophide.1       $(DESTDIR)$(MAN1PATH)
                cp man/atoprc.5         $(DESTDIR)$(MAN5PATH)
                cp man/atopacctd.8      $(DESTDIR)$(MAN8PATH)
diff -Nru atop-2.11.1/debian/patches/no-files-in-var-log.patch 
atop-2.11.1/debian/patches/no-files-in-var-log.patch
--- atop-2.11.1/debian/patches/no-files-in-var-log.patch        2025-05-04 
18:41:13.000000000 +0200
+++ atop-2.11.1/debian/patches/no-files-in-var-log.patch        2025-05-28 
18:07:22.000000000 +0200
@@ -1,7 +1,15 @@
-Description: don't create dummy files in log dir on package build
-Author: Marc Haber <mh+debian-packa...@zugschlus.de>
+From: Marc Haber <mh+debian-packa...@zugschlus.de>
+Date: Sun, 25 May 2025 20:54:51 +0200
+Subject: don't create dummy files in log dir on package build
+
 Forwarded: not-needed
 Last-Update: 2016-08-07
+---
+ Makefile | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 5a57d8d..6b7817d 100644
 --- a/Makefile
 +++ b/Makefile
 @@ -101,8 +101,6 @@ sysvinstall:       genericinstall
diff -Nru atop-2.11.1/debian/patches/no-version-symlinks.patch 
atop-2.11.1/debian/patches/no-version-symlinks.patch
--- atop-2.11.1/debian/patches/no-version-symlinks.patch        2025-05-04 
18:41:13.000000000 +0200
+++ atop-2.11.1/debian/patches/no-version-symlinks.patch        2025-05-28 
18:07:22.000000000 +0200
@@ -1,10 +1,18 @@
-Description: do not symlink atop(sar)-$(VERS)
-Author: Marc Haber <mh+debian-packa...@zugschlus.de>
+From: Marc Haber <mh+debian-packa...@zugschlus.de>
+Date: Sun, 25 May 2025 20:54:51 +0200
+Subject: do not symlink atop(sar)-$(VERS)
+
 Forwarded: via web form
 Last-Update: 2016-08-07
+---
+ Makefile | 2 --
+ 1 file changed, 2 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index 6b7817d..8e5da0e 100644
 --- a/Makefile
 +++ b/Makefile
-@@ -157,8 +157,6 @@ genericinstall:    atop atopacctd atopconve
+@@ -157,8 +157,6 @@ genericinstall:    atop atopacctd atopconvert atopcat 
atophide
                chmod 0700              $(DESTDIR)$(SBINPATH)/atopacctd
                cp atopgpud             $(DESTDIR)$(SBINPATH)/atopgpud
                chmod 0700              $(DESTDIR)$(SBINPATH)/atopgpud
diff -Nru atop-2.11.1/debian/patches/series atop-2.11.1/debian/patches/series
--- atop-2.11.1/debian/patches/series   2025-05-04 18:41:13.000000000 +0200
+++ atop-2.11.1/debian/patches/series   2025-05-28 18:07:22.000000000 +0200
@@ -13,3 +13,6 @@
 no-atopgpud.patch
 handle-default-file.patch
 default.patch
+0016-replace-sprintf-with-snprintf.patch
+0017-new-parameter-for-formatr_bandw-to-get-rid-of-sprint.patch
+0018-fix-buffer-overflow-crash-on-Raspberry-Pi-5-fake-NUM.patch
diff -Nru atop-2.11.1/debian/patches/var-run.patch 
atop-2.11.1/debian/patches/var-run.patch
--- atop-2.11.1/debian/patches/var-run.patch    2025-05-04 18:41:13.000000000 
+0200
+++ atop-2.11.1/debian/patches/var-run.patch    2025-05-28 18:07:22.000000000 
+0200
@@ -1,7 +1,20 @@
-Description: replace /var/run with /run
-Author: Marc Haber <mh+debian-packa...@zugschlus.de>
+From: Marc Haber <mh+debian-packa...@zugschlus.de>
+Date: Sun, 25 May 2025 20:54:51 +0200
+Subject: replace /var/run with /run
+
 Forwarded: via web form
 Last-Update: 2016-08-07
+---
+ 45atoppm        | 2 +-
+ atop.daily      | 2 +-
+ atop.init       | 6 +++---
+ man/atop.1      | 4 ++--
+ man/atopacctd.8 | 8 ++++----
+ man/atoprc.5    | 2 +-
+ 6 files changed, 12 insertions(+), 12 deletions(-)
+
+diff --git a/45atoppm b/45atoppm
+index 231979d..d359d76 100755
 --- a/45atoppm
 +++ b/45atoppm
 @@ -4,7 +4,7 @@
@@ -13,6 +26,8 @@
  INTERVAL=600          # interval 10 minutes
  CURDAY=`date +%Y%m%d` # current date in same format
  
+diff --git a/atop.daily b/atop.daily
+index d44fd15..2508426 100755
 --- a/atop.daily
 +++ b/atop.daily
 @@ -28,7 +28,7 @@ fi
@@ -24,6 +39,8 @@
  
  # verify if atop still runs for daily logging
  #
+diff --git a/atop.init b/atop.init
+index be60584..3764201 100755
 --- a/atop.init
 +++ b/atop.init
 @@ -20,7 +20,7 @@
@@ -53,6 +70,8 @@
        ;;
  
    status)
+diff --git a/man/atop.1 b/man/atop.1
+index f161de5..9802ea3 100644
 --- a/man/atop.1
 +++ b/man/atop.1
 @@ -3087,7 +3087,7 @@ processes sorted on memory consumption:
@@ -64,7 +83,7 @@
  Directory containing the process accounting shadow files that are
  used by
  .I atop
-@@ -3147,7 +3147,7 @@ All binary system and process level data
+@@ -3147,7 +3147,7 @@ All binary system and process level data in this file 
has been stored
  in compressed format. 
  .PP
  .TP 5
@@ -73,9 +92,11 @@
  File that contains the netpertask structs containing the network
  counters of exited processes. These structs are written by the
  .I netatopd
+diff --git a/man/atopacctd.8 b/man/atopacctd.8
+index 4e014a7..0be957a 100644
 --- a/man/atopacctd.8
 +++ b/man/atopacctd.8
-@@ -70,7 +70,7 @@ any more. As soon as at least one client
+@@ -70,7 +70,7 @@ any more. As soon as at least one client is activate again, 
the
  daemon continues writing shadow files.
  .PP
  The directory
@@ -105,9 +126,11 @@
  Regular files containing the process accounting records that have
  been copied transparently from the source file (N represents a 10-digit
  sequence number).
+diff --git a/man/atoprc.5 b/man/atoprc.5
+index 43daf1a..c23c771 100644
 --- a/man/atoprc.5
 +++ b/man/atoprc.5
-@@ -235,7 +235,7 @@ daemon. In this directory, the daemon cr
+@@ -235,7 +235,7 @@ daemon. In this directory, the daemon creates a 
subdirectory
  .B pacct_shadow.d
  in which files will be written containing the process accounting records.
  The default topdirectory is

Reply via email to