--- zzzz-none-000/linux-3.10.107/arch/arm/mach-msm/last_radio_log.c 2017-06-27 09:49:32.000000000 +0000 +++ vr9-7490-729/linux-3.10.107/arch/arm/mach-msm/last_radio_log.c 2021-11-10 11:53:52.000000000 +0000 @@ -31,8 +31,20 @@ static ssize_t last_radio_log_read(struct file *file, char __user *buf, size_t len, loff_t *offset) { - return simple_read_from_buffer(buf, len, offset, - radio_log_base, radio_log_size); + loff_t pos = *offset; + ssize_t count; + + if (pos >= radio_log_size) + return 0; + + count = min(len, (size_t)(radio_log_size - pos)); + if (copy_to_user(buf, radio_log_base + pos, count)) { + pr_err("%s: copy to user failed\n", __func__); + return -EFAULT; + } + + *offset += count; + return count; } static struct file_operations last_radio_log_fops = { @@ -55,8 +67,7 @@ return; } - entry = proc_create("last_radio_log", S_IRUGO, NULL, - &last_radio_log_fops); + entry = create_proc_entry("last_radio_log", S_IFREG | S_IRUGO, NULL); if (!entry) { pr_err("%s: could not create proc entry for radio log\n", __func__); @@ -66,6 +77,7 @@ pr_err("%s: last radio log is %d bytes long\n", __func__, radio_log_size); last_radio_log_fops.owner = owner; - proc_set_size(entry, radio_log_size); + entry->proc_fops = &last_radio_log_fops; + entry->size = radio_log_size; } EXPORT_SYMBOL(msm_init_last_radio_log);