[torquedev] Patch for buglets in 2.3.1 found by GCC (was: TORQUE
2.3.1 Released)
Glen Beane
glen.beane at gmail.com
Thu Jul 3 17:08:51 MDT 2008
thanks for all the patches. I'll get those incorporated into TORQUE tonight
On Thu, Jul 3, 2008 at 2:26 PM, Tobias Burnus <burnus at net-b.de> wrote:
> Hello,
>
>
> First, compiling 2.3.1 fails here with:
> |
> cc1: warnings being treated as errors
> mom_server.c: In function 'is_mom_server_down':
> mom_server.c:2536: error: array subscript is above array bounds
>
>
> I believe that the logic of the for loop is wrong and the following patch
> is correct. Please check - especially check whether "==" or "!=" is correct.
>
> |||
>
> --- ../torque-2.3.1.orig/src/resmom/mom_server.c 2008-07-02
> 23:01:03.000000000 +0200
> +++ src/resmom/mom_server.c 2008-07-03 19:31:56.000000000 +0200
> @@ -2533,7 +2533,7 @@ is_mom_server_down(pbs_net_t server_addr
> {
> int sindex;
>
> - for (sindex = 0; sindex < PBS_MAXSERVER || down_svraddrs[sindex] == 0;
> sindex++)
> + for (sindex = 0; sindex < PBS_MAXSERVER && down_svraddrs[sindex] != 0;
> sindex++)
> {
> if (down_svraddrs[sindex] == server_address)
> {
>
>
>
> Fixing it, it fails with:
>
> |cc1: warnings being treated as errors
> start_exec.c: In function 'std_file_name':
> start_exec.c:5289: error: comparison with string literal results in
> unspecified behavior
>
>
> Which is fixed by:
>
> --- ../torque-2.3.1.orig/src/resmom/start_exec.c 2008-07-02
> 22:57:23.000000000 +0200
> +++ src/resmom/start_exec.c 2008-07-03 20:10:14.000000000 +0200
> @@ -5286,7 +5286,7 @@
>
> /* don't do for checkpoint file names, only StdErr and StdOut */
>
> - if (suffix != JOB_CKPT_SUFFIX)
> + if (strcmp(suffix, JOB_CKPT_SUFFIX) != 0)
> {
> pt = strstr(jobpath,"$HOME");
>
>
> |
>
> Secondly, it would be great if for 2.3.2 the invalid-memory-access bug in
> qsub could be fixed.
> http://www.clusterresources.com/pipermail/torquedev/2008-July/001119.html
>
>
> Thirdly, with all checking turned on, I need the attached patch in order to
> build Torque; please consider including them - especially prototype.patch.
>
> Regards,
>
> Tobias
>
>
> Thu, 03 Jul 2008 18:54:51 +0200 Tobias Burnus <burnus at net-b.de>
>
> Fix rpmlint errors: Return value of fwrite/fread was not checked.
>
> diff -ur ../torque-2.3.1.orig/src/resmom/linux/cpuset.c
> ./src/resmom/linux/cpuset.c
> --- ../torque-2.3.1.orig/src/resmom/linux/cpuset.c 2008-06-13
> 01:01:03.000000000 +0200
> +++ ./src/resmom/linux/cpuset.c 2008-07-03 18:51:04.000000000 +0200
> @@ -139,7 +139,11 @@
> strcat(path,"/cpus");
> fd=fopen(path,"r");
> if (fd) { /* FIXME: need proper error checking and response */
> - fread(cpuset_buf, sizeof(char), 1023, fd);
> + if (!fread(cpuset_buf, sizeof(char), 1023, fd))
> + {
> + perror("Readings cpus");
> + exit(1);
> + }
> fclose(fd);
> strcpy(path,TCPUSET_PATH);
> strcat(path,"/cpus");
> @@ -147,7 +151,11 @@
> if (fd) {
> sprintf (log_buffer, "adding %s to %s",cpuset_buf,path);
> log_err(-1,id,log_buffer);
> - fwrite(cpuset_buf, sizeof(char), strlen(cpuset_buf), fd);
> + if(!fwrite(cpuset_buf, sizeof(char), strlen(cpuset_buf), fd))
> + {
> + perror("Writing cpus");
> + exit(1);
> + }
> fclose(fd);
> }
> memset(cpuset_buf,'\0',sizeof(cpuset_buf));
> @@ -158,7 +166,11 @@
> strcat(path,"/mems");
> fd=fopen(path,"r");
> if (fd) {
> - fread(cpuset_buf, sizeof(char), 1023, fd);
> + if (!fread(cpuset_buf, sizeof(char), 1023, fd))
> + {
> + perror("Readings mems");
> + exit(1);
> + }
> fclose(fd);
> strcpy(path,TCPUSET_PATH);
> strcat(path,"/mems");
> @@ -166,7 +178,11 @@
> if (fd) {
> sprintf (log_buffer, "adding %s to %s",cpuset_buf,path);
> log_err(-1,id,log_buffer);
> - fwrite(cpuset_buf, sizeof(char), strlen(cpuset_buf), fd);
> + if (!fwrite(cpuset_buf, sizeof(char), strlen(cpuset_buf), fd))
> + {
> + perror("Writing mems");
> + exit(1);
> + }
> fclose(fd);
> }
> memset(cpuset_buf,'\0',sizeof(cpuset_buf));
> @@ -258,12 +274,20 @@
> strcat(rootpath,"/mems");
> fd=fopen(rootpath,"r");
> if (fd) {
> - fread(cpusbuf, sizeof(char), 1023, fd);
> + if (!fread(cpusbuf, sizeof(char), 1023, fd))
> + {
> + perror("Readings mems");
> + exit(1);
> + }
> fclose(fd);
> strcpy(tmppath,path);
> strcat(tmppath,"/mems");
> fd=fopen(tmppath,"w");
> - fwrite(cpusbuf, sizeof(char), strlen(cpusbuf), fd);
> + if (fwrite(cpusbuf, sizeof(char), strlen(cpusbuf), fd))
> + {
> + perror("Writing mems");
> + exit(1);
> + }
> fclose(fd);
> memset(cpusbuf,'\0',sizeof(cpusbuf));
> }
> @@ -294,7 +318,12 @@
> log_err(-1,id,log_buffer);
> fd=fopen(tmppath,"w");
> if (fd) {
> - fwrite(cpusbuf, sizeof(char), strlen(cpusbuf), fd);
> + if (!fwrite(cpusbuf, sizeof(char), strlen(cpusbuf), fd))
> + {
> + perror("Writing cpu sets");
> + exit(1);
> + }
> +
> fclose(fd);
> }
> memset(cpusbuf,'\0',sizeof(cpusbuf));
> @@ -316,7 +345,11 @@
> log_err(-1,id,log_buffer);
> fd=fopen(tmppath,"w");
> if (fd) {
> - fwrite(tasksbuf, sizeof(char), strlen(tasksbuf), fd);
> + if (!fwrite(tasksbuf, sizeof(char), strlen(tasksbuf), fd))
> + {
> + perror("Writing cpus");
> + exit(1);
> + }
> fclose(fd);
> }
> memset(tasksbuf,'\0',sizeof(tasksbuf));
> @@ -326,7 +359,11 @@
>
> sprintf(tmppath,"%s/%s/%s",TCPUSET_PATH,pjob->ji_qs.ji_jobid,"/mems");
> fd=fopen(tmppath,"r");
> if (fd) {
> - fread(tasksbuf, sizeof(char), 1023, fd);
> + if (!fread(tasksbuf, sizeof(char), 1023, fd))
> + {
> + perror("Reading tasksets");
> + exit(1);
> + }
> fclose(fd);
> }
>
> sprintf(tmppath,"%s/%s/%d/%s",TCPUSET_PATH,pjob->ji_qs.ji_jobid,np->vn_node,"/mems");
> @@ -334,7 +371,11 @@
> if (fd) {
> sprintf (log_buffer, "adding %s to %s",tasksbuf,tmppath);
> log_err(-1,id,log_buffer);
> - fwrite(tasksbuf, sizeof(char), strlen(tasksbuf), fd);
> + if (!fwrite(tasksbuf, sizeof(char), strlen(tasksbuf), fd))
> + {
> + perror("Writing tasksets");
> + exit(1);
> + }
> fclose(fd);
> }
> memset(tasksbuf,'\0',sizeof(tasksbuf));
> @@ -366,7 +407,11 @@
>
> fd=fopen(taskspath,"w");
> if (fd) {
> - fwrite(pidbuf,sizeof(char),strlen(pidbuf),fd);
> + if (!fwrite(pidbuf,sizeof(char),strlen(pidbuf),fd))
> + {
> + perror("Writing pid buffer");
> + exit(1);
> + }
> fclose(fd);
> }
> memset(pidbuf,'\0',sizeof(pidbuf));
> @@ -393,7 +438,11 @@
>
> fd=fopen(taskspath,"w");
> if (fd) {
> - fwrite(pidbuf,sizeof(char),strlen(pidbuf),fd);
> + if (!fwrite(pidbuf,sizeof(char),strlen(pidbuf),fd))
> + {
> + perror("Writing pid buffer");
> + exit(1);
> + }
> fclose(fd);
> }
> memset(pidbuf,'\0',sizeof(pidbuf));
>
> Tue Apr 1 18:14:02 CEST 2008 Tobias Burnus <burnus at net-b.de>
>
> 'freopen' is declared with attribute warn_unused_result
> and torque build with -Werror. The return value of freopen is now checked.
>
> diff -ur ../torque-2.3.0.orig/src/scheduler.cc/pbs_sched.c
> ./src/scheduler.cc/pbs_sched.c
> --- ../torque-2.3.0.orig/src/scheduler.cc/pbs_sched.c 2008-03-06
> 22:29:03.000000000 +0100
> +++ ./src/scheduler.cc/pbs_sched.c 2008-04-01 18:11:58.000000000 +0200
> @@ -981,7 +981,13 @@
>
> lock_out(lockfds, F_WRLCK);
>
> - freopen(dbfile, "a", stdout);
> + if (freopen(dbfile, "a", stdout) == NULL)
> + {
> + perror("opening lockfile");
> +
> + exit(1);
> + }
> +
>
> setvbuf(stdout, NULL, _IOLBF, 0);
>
> @@ -995,7 +1001,12 @@
> pid = getpid();
> }
>
> - freopen("/dev/null", "r", stdin);
> + if (freopen("/dev/null", "r", stdin) == NULL)
> + {
> + perror("opening /dev/null");
> +
> + exit(1);
> + }
>
> /* write scheduler's pid into lockfile */
>
>
> Thu, 03 Jul 2008 19:09:06 +0200 Tobias Burnus <burnus at net-b.de>
>
> init.d LSB conformance fixes.
>
> diff -ur ../torque-2.3.1.orig/contrib/init.d/suse.pbs_mom
> contrib//init.d/suse.pbs_mom
> --- ../torque-2.3.1.orig/contrib/init.d/suse.pbs_mom 2008-03-06
> 22:29:09.000000000 +0100
> +++ contrib//init.d/suse.pbs_mom 2008-07-03 19:41:01.000000000 +0200
> @@ -4,13 +4,16 @@
> #
> ### BEGIN INIT INFO
> # Provides: pbs_mom
> -# Required-Start: $local_fs
> +# Required-Start: $syslog $remote_fs
> # Should-Start: pbs_server pbs_sched
> -# Required-Stop:
> +# Required-Stop: $syslog $remote_fs
> # Should-Stop:
> # Default-Start: 2 3 5
> # Default-Stop:
> -# Description: Torque is a versatile batch system for SMPs and clusters
> +# Short-Description: Torque Node Manager Daemon
> +# Description: Torque is a versatile batch system for SMPs and clusters.
> +# This starts the operation of a batch Machine Oriented Mini-server,
> +# MOM, on the local host.
> ### END INIT INFO
>
> PBS_DAEMON=/usr/sbin/pbs_mom
> diff -ur ../torque-2.3.1.orig/contrib/init.d/suse.pbs_sched
> contrib//init.d/suse.pbs_sched
> --- ../torque-2.3.1.orig/contrib/init.d/suse.pbs_sched 2008-03-06
> 22:29:09.000000000 +0100
> +++ contrib//init.d/suse.pbs_sched 2008-07-03 19:41:05.000000000 +0200
> @@ -4,13 +4,18 @@
> #
> ### BEGIN INIT INFO
> # Provides: pbs_sched
> -# Required-Start: $local_fs
> +# Required-Start: $syslog $remote_fs
> # Should-Start: pbs_server
> -# Required-Stop:
> +# Required-Stop: $syslog $remote_fs
> # Should-Stop:
> # Default-Start: 2 3 5
> # Default-Stop:
> -# Description: Torque is a versatile batch system for SMPs and clusters
> +# Short-Description: Torque scheduler
> +# Description: Torque is a versatile batch system for SMPs and clusters.
> +# Starts the PBS scheduler, which runs in conjunction with the PBS
> server.
> +# it queries the server about the state of PBS and communicates with
> +# pbs_resmon to get information about the status of running jobs,
> memory
> +# available etc. It then makes decisions as to what jobs to run.
> ### END INIT INFO
>
> PBS_DAEMON=/usr/sbin/pbs_sched
> diff -ur ../torque-2.3.1.orig/contrib/init.d/suse.pbs_server
> contrib//init.d/suse.pbs_server
> --- ../torque-2.3.1.orig/contrib/init.d/suse.pbs_server 2008-03-06
> 22:29:09.000000000 +0100
> +++ contrib//init.d/suse.pbs_server 2008-07-03 19:08:02.000000000 +0200
> @@ -4,13 +4,16 @@
> #
> ### BEGIN INIT INFO
> # Provides: pbs_server
> -# Required-Start: $local_fs
> +# Required-Start: $syslog $remote_fs
> # Should-Start:
> -# Required-Stop:
> +# Required-Stop: $syslog $remote_fs
> # Should-Stop:
> # Default-Start: 2 3 5
> # Default-Stop:
> -# Description: Torque is a versatile batch system for SMPs and clusters
> +# Short-Description: Torque server
> +# Description: Torque is a versatile batch system for SMPs and clusters.
> +# Starts the PBS batch server, which operates as batch server
> +# on the local host.
> ### END INIT INFO
>
> PBS_DAEMON=/usr/sbin/pbs_server
>
> Thu Apr 24 10:32:28 CEST 2008 Tobias Burnus <burnus at net-b.de>
>
> Fix prototype declaration for -Wunprototyped-calls.
>
>
> diff -r -p -u ../torque-2.3.0.orig//doc/soelim.c .//doc/soelim.c
> --- ../torque-2.3.0.orig//doc/soelim.c 2008-03-06 22:29:12.000000000 +0100
> +++ .//doc/soelim.c 2008-04-24 14:57:55.000000000 +0200
> @@ -102,7 +102,7 @@ int main(argc, argv)
> int argc;
> char *argv[];
> {
> - int dofile();
> + int dofile(FILE *);
> int dirct = 0;
> FILE *filein;
> int i;
> diff -r -p -u ../torque-2.3.0.orig//src/cmds/qdisable.c
> .//src/cmds/qdisable.c
> --- ../torque-2.3.0.orig//src/cmds/qdisable.c 2008-03-06
> 22:28:55.000000000 +0100
> +++ .//src/cmds/qdisable.c 2008-04-24 13:19:46.000000000 +0200
> @@ -110,7 +110,7 @@
>
> int exitstatus = 0; /* Exit Status */
>
> -static void execute ();
> +static void execute (char *, char *);
>
> int main ( argc, argv )
> int argc;
> diff -r -p -u ../torque-2.3.0.orig//src/cmds/qenable.c
> .//src/cmds/qenable.c
> --- ../torque-2.3.0.orig//src/cmds/qenable.c 2008-03-06
> 22:28:55.000000000 +0100
> +++ .//src/cmds/qenable.c 2008-04-24 13:27:49.000000000 +0200
> @@ -109,7 +109,7 @@
>
>
> int exitstatus = 0; /* Exit Status */
> -static void execute ();
> +static void execute (char *, char *);
>
>
> int main(
> diff -r -p -u ../torque-2.3.0.orig//src/cmds/qrun.c .//src/cmds/qrun.c
> --- ../torque-2.3.0.orig//src/cmds/qrun.c 2008-03-06
> 22:28:55.000000000 +0100
> +++ .//src/cmds/qrun.c 2008-04-24 13:36:27.000000000 +0200
> @@ -101,7 +101,7 @@
> #include <pbs_config.h> /* the master config generated by configure */
>
> int exitstatus = 0; /* Exit Status */
> -static void execute();
> +static void execute(char *, char *, char *, int);
>
>
>
> diff -r -p -u ../torque-2.3.0.orig//src/cmds/qstart.c .//src/cmds/qstart.c
> --- ../torque-2.3.0.orig//src/cmds/qstart.c 2008-03-06
> 22:28:55.000000000 +0100
> +++ .//src/cmds/qstart.c 2008-04-24 13:36:39.000000000 +0200
> @@ -108,7 +108,7 @@
>
>
> int exitstatus = 0; /* Exit Status */
> -static void execute ();
> +static void execute (char *, char *);
>
>
> int main (
> diff -r -p -u ../torque-2.3.0.orig//src/cmds/qstop.c .//src/cmds/qstop.c
> --- ../torque-2.3.0.orig//src/cmds/qstop.c 2008-03-06
> 22:28:55.000000000 +0100
> +++ .//src/cmds/qstop.c 2008-04-24 13:36:48.000000000 +0200
> @@ -108,7 +108,7 @@
>
>
> int exitstatus = 0; /* Exit Status */
> -static void execute ();
> +static void execute (char *, char *);
>
>
> int main ( argc, argv )
> diff -r -p -u ../torque-2.3.0.orig//src/cmds/qterm.c .//src/cmds/qterm.c
> --- ../torque-2.3.0.orig//src/cmds/qterm.c 2008-03-06
> 22:28:55.000000000 +0100
> +++ .//src/cmds/qterm.c 2008-04-24 13:37:00.000000000 +0200
> @@ -113,7 +113,7 @@
>
> int exitstatus = 0; /* Exit Status */
>
> -static void execute();
> +static void execute(int, char *);
>
> int main(
>
> diff -r -p -u ../torque-2.3.0.orig//src/include/md5.h .//src/include/md5.h
> --- ../torque-2.3.0.orig//src/include/md5.h 2008-03-06
> 22:28:54.000000000 +0100
> +++ .//src/include/md5.h 2008-04-24 13:03:03.000000000 +0200
> @@ -55,9 +55,9 @@ typedef struct {
> unsigned char digest[16]; /* actual digest after MD5Final call */
> } MD5_CTX;
>
> -void MD5Init ();
> -void MD5Update ();
> -void MD5Final ();
> +void MD5Init (MD5_CTX *);
> +void MD5Update (MD5_CTX *, unsigned char *, unsigned int);
> +void MD5Final (MD5_CTX *);
>
> #define __MD5_INCLUDE__
> #endif /* __MD5_INCLUDE__ */
> diff -r -p -u ../torque-2.3.0.orig//src/include/mom_func.h
> .//src/include/mom_func.h
> --- ../torque-2.3.0.orig//src/include/mom_func.h 2008-03-06
> 22:28:54.000000000 +0100
> +++ .//src/include/mom_func.h 2008-04-24 12:52:13.000000000 +0200
> @@ -149,7 +149,7 @@ extern void set_globid A_((job *, struc
> extern int set_mach_vars A_((job *, struct var_table *));
> extern char *set_shell A_((job *, struct passwd *));
> extern void start_exec A_((job *));
> -extern int open_master();
> +extern int open_master(char **);
> extern int open_slave();
> extern char *rcvttype A_((int));
> extern int rcvwinsize A_((int));
> diff -r -p -u ../torque-2.3.0.orig//src/include/qmgr.h
> .//src/include/qmgr.h
> --- ../torque-2.3.0.orig//src/include/qmgr.h 2008-03-06
> 22:28:54.000000000 +0100
> +++ .//src/include/qmgr.h 2008-04-24 14:14:18.000000000 +0200
> @@ -166,30 +166,30 @@ struct objname
>
>
> /* prototypes */
> -struct objname *commalist2objname();
> -struct server *find_server();
> +struct objname *commalist2objname(char *, int);
> +struct server *find_server(char *);
> struct server *make_connection();
> struct server *new_server();
> struct objname *new_objname();
> -struct objname *strings2objname( );
> +struct objname *strings2objname(char **, int, int);
> struct objname *default_server_name();
> -struct objname *temp_objname();
> -int parse_request( );
> -void clean_up_and_exit();
> -void freeattrl();
> -void freeattropl();
> -void pstderr_big();
> -void free_objname_list();
> -void free_server();
> -void free_objname();
> +struct objname *temp_objname(char *, char *, struct server *);
> +int parse_request(char *, char [][MAX_REQ_WORD_LEN]);
> +void clean_up_and_exit(int);
> +void freeattrl(struct attrl *);
> +void freeattropl(struct attropl *);
> +void pstderr_big(char *, char*, char *);
> +void free_objname_list(struct objname *);
> +void free_server(struct server *);
> +void free_objname(struct objname *);
> void close_non_ref_servers();
> -int connect_servers();
> -int set_active();
> -int get_request();
> -int parse();
> -int execute();
> -int is_attr();
> -int is_valid_object();
> +int connect_servers(struct objname *, int);
> +int set_active(int, struct objname *);
> +int get_request(char *);
> +int parse(char *, int *, int *, char **, struct attropl **);
> +int execute(int, int, int, char *, struct attropl *);
> +int is_attr(int, char *, int);
> +int is_valid_object(struct objname *, int);
> void disconnect_from_server();
>
>
> diff -r -p -u ../torque-2.3.0.orig//src/lib/Libnet/md5.c
> .//src/lib/Libnet/md5.c
> --- ../torque-2.3.0.orig//src/lib/Libnet/md5.c 2008-03-06
> 22:29:09.000000000 +0100
> +++ .//src/lib/Libnet/md5.c 2008-04-24 10:27:41.000000000 +0200
> @@ -49,7 +49,7 @@
> */
>
> /* forward declaration */
> -static void Transform ();
> +static void Transform (UINT4 *, UINT4 *);
>
> static unsigned char PADDING[64] = {
> 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
> diff -r -p -u ../torque-2.3.0.orig//src/lib/Libnet/net_server.c
> .//src/lib/Libnet/net_server.c
> --- ../torque-2.3.0.orig//src/lib/Libnet/net_server.c 2008-03-06
> 22:29:09.000000000 +0100
> +++ .//src/lib/Libnet/net_server.c 2008-04-24 11:08:33.000000000 +0200
> @@ -115,7 +115,7 @@ extern int LOGLEVEL;
>
> extern void process_request A_((int));
>
> -extern time_t time();
> +extern time_t time(time_t *);
>
> /* Global Data (I wish I could make it private to the library, sigh, but
> * C don't support that scope of control.)
> diff -r -p -u ../torque-2.3.0.orig//src/resmom/start_exec.c
> .//src/resmom/start_exec.c
> --- ../torque-2.3.0.orig//src/resmom/start_exec.c 2008-03-06
> 22:29:05.000000000 +0100
> +++ .//src/resmom/start_exec.c 2008-04-24 13:11:05.000000000 +0200
> @@ -4644,9 +4644,9 @@ void start_exec(
>
> MD5Init(&c);
>
> - MD5Update(&c,(caddr_t)&loopcnt,sizeof(loopcnt));
> + MD5Update(&c,(unsigned char *)&loopcnt,sizeof(loopcnt));
>
> - MD5Update(&c,(caddr_t)pjob,sizeof(job));
> + MD5Update(&c,(unsigned char *)pjob,sizeof(job));
>
> MD5Final(&c);
>
> diff -r -p -u ../torque-2.3.0.orig//src/server/req_stat.c
> .//src/server/req_stat.c
> --- ../torque-2.3.0.orig//src/server/req_stat.c 2008-03-06
> 22:29:06.000000000 +0100
> +++ .//src/server/req_stat.c 2008-04-24 11:56:13.000000000 +0200
> @@ -119,7 +119,7 @@ extern attribute_def node_attr_def[];
> extern int pbs_mom_port;
> extern time_t time_now;
> extern char *msg_init_norerun;
> -extern struct pbsnode *tfind_addr();
> +extern struct pbsnode *tfind_addr(const u_long);
> extern int LOGLEVEL;
>
> /* Extern Functions */
>
> _______________________________________________
> torquedev mailing list
> torquedev at supercluster.org
> http://www.supercluster.org/mailman/listinfo/torquedev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.supercluster.org/pipermail/torquedev/attachments/20080703/51af39b0/attachment-0001.html
More information about the torquedev
mailing list