Thanks for this.
Regards--
Subrata
On Fri, 2008-10-24 at 12:31 +0200, Jiri Palecek wrote:
> Hello,
>
> the attached patches fix some segfaults I've experienced running ltp.
> The
> descriptions are included in the patches.
>
> Regards
> Jiri Palecek
>
>
>
>
>
>
>
>
> differences
> between files
> attachment
> (0003-Fix-a-segfault-in-mallocstress.c.patch)
>
> From db2ed5a8d182b62eccbd8c3cf3929f3e5316fbde Mon Sep 17 00:00:00 2001
> From: Jiri Palecek <[EMAIL PROTECTED](none)>
> Date: Thu, 23 Oct 2008 21:55:21 +0200
> Subject: [PATCH] Fix a segfault in mallocstress.c
>
> The result of alloc_mem thread could be either NULL, ptr to some
> allocated memory or (void*)-1. The code reading this result actually
> handled cases 1 & 2 only, and even case "NULL" was mishandled,
> causing a segfault. This patch fixes it, by
>
> - removing the case when alloc_mem would return -1, change it to the
> "allocated memory" case
> - not checking for *th_status, if th_status might be null
> ---
> testcases/kernel/mem/mtest07/mallocstress.c | 19
> ++++++++++---------
> 1 files changed, 10 insertions(+), 9 deletions(-)
>
> diff --git a/testcases/kernel/mem/mtest07/mallocstress.c
> b/testcases/kernel/mem/mtest07/mallocstress.c
> index aef5bf0..9c96703 100644
> --- a/testcases/kernel/mem/mtest07/mallocstress.c
> +++ b/testcases/kernel/mem/mtest07/mallocstress.c
> @@ -262,19 +262,21 @@ alloc_mem(void * threadnum)
> sop[0].sem_op = 0;
> sop[0].sem_flg = 0;
> int *err;
> - /* waiting for other threads starting */
> - if (semop(semid, sop, 1) == -1) {
> - if (errno != EIDRM)
> - perror("semop");
> - return (void *) -1;
> - }
>
> err = malloc(sizeof(int));
> if (err == NULL) {
> perror("malloc");
> return NULL;
> }
> -
> +
> + /* waiting for other threads starting */
> + if (semop(semid, sop, 1) == -1) {
> + if (errno != EIDRM)
> + perror("semop");
> + *err = -1;
> + return (void*)err;
> + }
> +
> /* thread N will use growth scheme N mod 4 */
> *err = allocate_free(num_loop, *(int *)threadnum % 4);
> fprintf(stdout,
> @@ -408,8 +410,7 @@ main(int argc, /* number of input
> parameters */
> {
> if (th_status == NULL || *th_status == -1)
> {
> - if (*th_status == -1)
> - free(th_status);
> + free(th_status);
> fprintf(stderr,
> "main(): thread [%d] - exited with errors\n",
> thrd_ndx);
> ret = -1;
> --
> 1.5.6.5
>
> Signed-off-by: Jiri Palecek <[EMAIL PROTECTED]>
>
>
>
>
>
>
>
> differences
> between files
> attachment
> (0004-Fix-segfault-in-in6_02.patch)
>
> From 7060c2c51d596128314eecac6d16a9b77b220b5b Mon Sep 17 00:00:00 2001
> From: Jiri Palecek <[EMAIL PROTECTED](none)>
> Date: Thu, 23 Oct 2008 22:07:05 +0200
> Subject: [PATCH] Fix segfault in in6_02
>
> In the i2ntest1 testcase, the call if_nametoindex(TEST_RETURN) was
> segfaulting, because TEST_RETURN was actually result of comparison
> (ifname==if_indextoname(...)). The fix is to call it with real
> ifname.
> ---
> testcases/network/lib6/in6_02.c | 4 ++--
> 1 files changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/testcases/network/lib6/in6_02.c
> b/testcases/network/lib6/in6_02.c
> index 3f68ee0..9e20e64 100644
> --- a/testcases/network/lib6/in6_02.c
> +++ b/testcases/network/lib6/in6_02.c
> @@ -158,7 +158,7 @@ i2ntest1(unsigned int if_index)
> return 1;
> }
> /* else, a valid interface-- double check name */
> - idx = if_nametoindex((char *)TEST_RETURN);
> + idx = if_nametoindex(ifname);
> if (idx != if_index) {
> tst_resm(TFAIL, "if_indextoname(%d) returns \"%s\" but
> "
> "doesn't if_nametoindex(\"%s\") returns %d",
> @@ -166,7 +166,7 @@ i2ntest1(unsigned int if_index)
> return 0;
> }
> tst_resm(TPASS, "if_indextoname(%d) returns \"%s\"", if_index,
> - TEST_RETURN);
> + ifname);
> return 1;
> }
>
> --
> 1.5.6.5
>
> Signed-off-by: Jiri Palecek <[EMAIL PROTECTED]>
>
>
>
>
>
>
>
> differences
> between files
> attachment
> (0005-Fix-segfaults-on-getaddrinfo-failures-in-pingpong6.c.patch)
>
> From 1bbea8388b0a70cccc87c678ed344b5baf109f0d Mon Sep 17 00:00:00 2001
> From: Jiri Palecek <[EMAIL PROTECTED](none)>
> Date: Thu, 23 Oct 2008 22:28:38 +0200
> Subject: [PATCH] Fix segfaults on getaddrinfo failures in pingpong6.c
>
> pingpong6.c would segfault if getaddrinfo fails, because it would go
> on after the failure and read invalid data (ie. the hp pointer). The
> fix is to exit immediately on getaddrinfo errors.
> ---
> testcases/network/ipv6/perf_lan6/pingpong6.c | 8 ++++++--
> 1 files changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/testcases/network/ipv6/perf_lan6/pingpong6.c
> b/testcases/network/ipv6/perf_lan6/pingpong6.c
> index 1933737..052aab1 100644
> --- a/testcases/network/ipv6/perf_lan6/pingpong6.c
> +++ b/testcases/network/ipv6/perf_lan6/pingpong6.c
> @@ -100,10 +100,14 @@ char *argv[];
> memset(&hints, 0, sizeof(hints));
> hints.ai_family = PF_INET6;
>
> - if ((gai=getaddrinfo(av[1], NULL, &hints, &hp))!=0)
> + if ((gai=getaddrinfo(av[1], NULL, &hints, &hp))!=0) {
> fprintf(stderr, "Unknown subject address %s: %s
> \n",av[1], gai_strerror(gai));
> - if (!hp->ai_addr || hp->ai_addr->sa_family != AF_INET6)
> + exit(1);
> + }
> + if (!hp->ai_addr || hp->ai_addr->sa_family != AF_INET6) {
> fprintf(stderr, "getaddrinfo failed");
> + exit(1);
> + }
> strcpy(hnamebuf, av[1]);
> hostname = hnamebuf;
> memset( (char *)&whereto, 0x00, sizeof(struct sockaddr) );
> --
> 1.5.6.5
>
> Signed-off-by: Jiri Palecek <[EMAIL PROTECTED]>
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Ltp-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ltp-list