diff options
author | Ulrich Drepper <drepper@redhat.com> | 2003-08-25 18:37:54 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2003-08-25 18:37:54 +0000 |
commit | 062df960458326de96ff41af51b92bcb56053129 (patch) | |
tree | ac738c13f1bf5d6019f8c8f79ae8b42f74f729b5 | |
parent | 47ceb39de3ef6668215ee952b3b7ed99367bf969 (diff) | |
download | glibc-062df960458326de96ff41af51b92bcb56053129.tar.gz glibc-062df960458326de96ff41af51b92bcb56053129.tar.xz glibc-062df960458326de96ff41af51b92bcb56053129.zip |
(save_cache): Don't write beyond end of file_entries buffer. Duplicate last old cache entry if the count would be odd.
-rw-r--r-- | elf/cache.c | 16 | ||||
-rw-r--r-- | localedata/locales/wa_BE | 4 | ||||
-rw-r--r-- | localedata/locales/yi_US | 4 |
3 files changed, 18 insertions, 6 deletions
diff --git a/elf/cache.c b/elf/cache.c index eda1ce2d8e..22ad55c612 100644 --- a/elf/cache.c +++ b/elf/cache.c @@ -305,6 +305,13 @@ save_cache (const char *cache_name) if (opt_format != 2) { + /* struct cache_file_new is 64-bit aligned on some arches while + only 32-bit aligned on other arches. Duplicate last old + cache entry so that new cache in ld.so.cache can be used by + both. */ + if (opt_format != 0) + cache_entry_old_count = (cache_entry_old_count + 1) & ~1; + /* And the list of all entries in the old format. */ file_entries_size = sizeof (struct cache_file) + cache_entry_old_count * sizeof (struct file_entry); @@ -351,7 +358,7 @@ save_cache (const char *cache_name) entry = entry->next, ++idx_new) { /* First the library. */ - if (opt_format != 2) + if (opt_format != 2 && entry->hwcap == 0) { file_entries->libs[idx_old].flags = entry->flags; /* XXX: Actually we can optimize here and remove duplicates. */ @@ -374,7 +381,7 @@ save_cache (const char *cache_name) ++str; str_offset += len + 1; /* Then the path. */ - if (opt_format != 2) + if (opt_format != 2 && entry->hwcap == 0) file_entries->libs[idx_old].value = str_offset + pad; if (opt_format != 0) file_entries_new->libs[idx_new].value = str_offset; @@ -388,6 +395,11 @@ save_cache (const char *cache_name) ++idx_old; } + /* Duplicate last old cache entry if needed. */ + if (opt_format != 2 + && idx_old < cache_entry_old_count) + file_entries->libs[idx_old] = file_entries->libs[idx_old - 1]; + /* Write out the cache. */ /* Write cache first to a temporary file and rename it later. */ diff --git a/localedata/locales/wa_BE b/localedata/locales/wa_BE index b5eb5c7960..05ad590af2 100644 --- a/localedata/locales/wa_BE +++ b/localedata/locales/wa_BE @@ -11,8 +11,8 @@ email "Djan_Sacre@skynet.be, pablo@mandrakesoft.com" address "" tel "" fax "" -language "wa" -territory "BE" +language "Walloon" +territory "Belgium" revision "0.7" date "2002-02-11" diff --git a/localedata/locales/yi_US b/localedata/locales/yi_US index 22d5963386..f993d0c677 100644 --- a/localedata/locales/yi_US +++ b/localedata/locales/yi_US @@ -11,8 +11,8 @@ contact "Pablo Saratxaga" email "pablo@mandrakesoft.com" tel "" fax "" -language "yi" -territory "US" +language "Yiddish" +territory "USA" revision "0.3" date "2001-01-28" |