1*4882a593SmuzhiyunFrom 2298f6e0d951251bb9ca97d891d1bc8b74515f8c Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: Darren Kenny <darren.kenny@oracle.com> 3*4882a593SmuzhiyunDate: Fri, 23 Oct 2020 17:09:31 +0000 4*4882a593SmuzhiyunSubject: [PATCH] hfsplus: Check that the volume name length is valid 5*4882a593Smuzhiyun 6*4882a593SmuzhiyunHFS+ documentation suggests that the maximum filename and volume name is 7*4882a593Smuzhiyun255 Unicode characters in length. 8*4882a593Smuzhiyun 9*4882a593SmuzhiyunSo, when converting from big-endian to little-endian, we should ensure 10*4882a593Smuzhiyunthat the name of the volume has a length that is between 0 and 255, 11*4882a593Smuzhiyuninclusive. 12*4882a593Smuzhiyun 13*4882a593SmuzhiyunFixes: CID 73641 14*4882a593Smuzhiyun 15*4882a593SmuzhiyunSigned-off-by: Darren Kenny <darren.kenny@oracle.com> 16*4882a593SmuzhiyunReviewed-by: Daniel Kiper <daniel.kiper@oracle.com> 17*4882a593SmuzhiyunSigned-off-by: Stefan Sørensen <stefan.sorensen@spectralink.com> 18*4882a593Smuzhiyun--- 19*4882a593Smuzhiyun grub-core/fs/hfsplus.c | 9 +++++++++ 20*4882a593Smuzhiyun 1 file changed, 9 insertions(+) 21*4882a593Smuzhiyun 22*4882a593Smuzhiyundiff --git a/grub-core/fs/hfsplus.c b/grub-core/fs/hfsplus.c 23*4882a593Smuzhiyunindex 9c4e4c8..8fe7c12 100644 24*4882a593Smuzhiyun--- a/grub-core/fs/hfsplus.c 25*4882a593Smuzhiyun+++ b/grub-core/fs/hfsplus.c 26*4882a593Smuzhiyun@@ -1012,6 +1012,15 @@ grub_hfsplus_label (grub_device_t device, char **label) 27*4882a593Smuzhiyun grub_hfsplus_btree_recptr (&data->catalog_tree, node, ptr); 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun label_len = grub_be_to_cpu16 (catkey->namelen); 30*4882a593Smuzhiyun+ 31*4882a593Smuzhiyun+ /* Ensure that the length is >= 0. */ 32*4882a593Smuzhiyun+ if (label_len < 0) 33*4882a593Smuzhiyun+ label_len = 0; 34*4882a593Smuzhiyun+ 35*4882a593Smuzhiyun+ /* Ensure label length is at most 255 Unicode characters. */ 36*4882a593Smuzhiyun+ if (label_len > 255) 37*4882a593Smuzhiyun+ label_len = 255; 38*4882a593Smuzhiyun+ 39*4882a593Smuzhiyun label_name = grub_calloc (label_len, sizeof (*label_name)); 40*4882a593Smuzhiyun if (!label_name) 41*4882a593Smuzhiyun { 42*4882a593Smuzhiyun-- 43*4882a593Smuzhiyun2.14.2 44*4882a593Smuzhiyun 45