Resolves: RHEL-16549, systemtap uprobe partial registration failure can cause crashes
This commit is contained in:
		
							parent
							
								
									7e30728b5f
								
							
						
					
					
						commit
						2a2af534e3
					
				
							
								
								
									
										59
									
								
								RHEL-16549.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								RHEL-16549.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,59 @@ | |||||||
|  | commit 0fef0bd60ff4b359a32da52262855dfe82fe51ae | ||||||
|  | gpg: Signature made Tue 14 Nov 2023 03:20:12 PM EST | ||||||
|  | gpg:                using RSA key 4B35DCD2EA45C4E0783135BC8094BE9C9F4696A1 | ||||||
|  | gpg: Can't check signature: No public key | ||||||
|  | Author: Yichun Zhang (agentzh) <yichun@openresty.com> | ||||||
|  | Date:   Fri Nov 10 21:51:56 2023 -0800 | ||||||
|  | 
 | ||||||
|  |     PR31051: memory and uprobe leaks in early uprobe registraton code when errors happen | ||||||
|  | 
 | ||||||
|  | diff --git a/runtime/linux/uprobes-inode.c b/runtime/linux/uprobes-inode.c
 | ||||||
|  | index 997f4528d..289cce00b 100644
 | ||||||
|  | --- a/runtime/linux/uprobes-inode.c
 | ||||||
|  | +++ b/runtime/linux/uprobes-inode.c
 | ||||||
|  | @@ -529,6 +529,16 @@ stapiu_init(struct stapiu_consumer *consumers, size_t nconsumers)
 | ||||||
|  |    } | ||||||
|  |   | ||||||
|  |    if (unlikely(ret != 0)) { | ||||||
|  | +    for ( ;; ) {
 | ||||||
|  | +      struct stapiu_consumer *c = &consumers[i];
 | ||||||
|  | +      // protect against conceivable stapiu_refresh() at same time
 | ||||||
|  | +      mutex_lock(& c->consumer_lock);
 | ||||||
|  | +      stapiu_consumer_unreg(c);
 | ||||||
|  | +      mutex_unlock(& c->consumer_lock);
 | ||||||
|  | +      if (i == 0)
 | ||||||
|  | +        break;
 | ||||||
|  | +      i--;
 | ||||||
|  | +    }
 | ||||||
|  |      return ret; | ||||||
|  |    } | ||||||
|  |   | ||||||
|  | @@ -545,7 +555,27 @@ stapiu_init(struct stapiu_consumer *consumers, size_t nconsumers)
 | ||||||
|  |        break; | ||||||
|  |      } | ||||||
|  |    } | ||||||
|  | -  return ret;
 | ||||||
|  | +
 | ||||||
|  | +  if (unlikely(ret != 0)) {
 | ||||||
|  | +    int j;
 | ||||||
|  | +    for (j = 0; j < nconsumers; ++j) {
 | ||||||
|  | +      struct stapiu_consumer *c = &consumers[j];
 | ||||||
|  | +      // protect against conceivable stapiu_refresh() at same time
 | ||||||
|  | +      mutex_lock(& c->consumer_lock);
 | ||||||
|  | +      stapiu_consumer_unreg(c);
 | ||||||
|  | +      mutex_unlock(& c->consumer_lock);
 | ||||||
|  | +    }
 | ||||||
|  | +    for ( ;; ) {
 | ||||||
|  | +      struct stapiu_consumer *c = &consumers[i];
 | ||||||
|  | +      stap_cleanup_task_finder_target(&c->finder);
 | ||||||
|  | +      if (i == 0)
 | ||||||
|  | +        break;
 | ||||||
|  | +      i--;
 | ||||||
|  | +    }
 | ||||||
|  | +    return ret;
 | ||||||
|  | +  }
 | ||||||
|  | +
 | ||||||
|  | +  return 0;
 | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |   | ||||||
| @ -116,7 +116,7 @@ m     stapdev  stapdev | |||||||
| Name: systemtap | Name: systemtap | ||||||
| # PRERELEASE | # PRERELEASE | ||||||
| Version: 5.0 | Version: 5.0 | ||||||
| Release: 1%{?release_override}%{?dist} | Release: 3%{?release_override}%{?dist} | ||||||
| # for version, see also configure.ac | # for version, see also configure.ac | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -153,6 +153,8 @@ License: GPL-2.0-or-later | |||||||
| URL: http://sourceware.org/systemtap/ | URL: http://sourceware.org/systemtap/ | ||||||
| Source: ftp://sourceware.org/pub/systemtap/releases/systemtap-%{version}.tar.gz | Source: ftp://sourceware.org/pub/systemtap/releases/systemtap-%{version}.tar.gz | ||||||
| 
 | 
 | ||||||
|  | Patch1: RHEL-16549.patch | ||||||
|  | 
 | ||||||
| # Build* | # Build* | ||||||
| BuildRequires: make | BuildRequires: make | ||||||
| BuildRequires: gcc-c++ | BuildRequires: gcc-c++ | ||||||
| @ -579,6 +581,7 @@ or within a container. | |||||||
| 
 | 
 | ||||||
| %prep | %prep | ||||||
| %setup -q | %setup -q | ||||||
|  | %patch -P1 -p1 | ||||||
| 
 | 
 | ||||||
| %build | %build | ||||||
| 
 | 
 | ||||||
| @ -1298,6 +1301,12 @@ exit 0 | |||||||
| 
 | 
 | ||||||
| # PRERELEASE | # PRERELEASE | ||||||
| %changelog | %changelog | ||||||
|  | * Tue Nov 14 2023 Frank Ch. Eigler <fche@redhat.com> - 5.0-3 | ||||||
|  | - RHEL-16549 | ||||||
|  | 
 | ||||||
|  | * Mon Nov 06 2023 Frank Ch. Eigler <fche@redhat.com> - 5.0-2 | ||||||
|  | - License header tweak | ||||||
|  | 
 | ||||||
| * Sat Nov 04 2023 Frank Ch. Eigler <fche@redhat.com> - 5.0-1 | * Sat Nov 04 2023 Frank Ch. Eigler <fche@redhat.com> - 5.0-1 | ||||||
| - Upstream release, see wiki page below for detailed notes. | - Upstream release, see wiki page below for detailed notes. | ||||||
|   https://sourceware.org/systemtap/wiki/SystemTapReleases |   https://sourceware.org/systemtap/wiki/SystemTapReleases | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user