- fixed crash when there was no device.

git-svn-id: svn://kolibrios.org@9144 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
turbocat 2021-08-19 20:26:35 +00:00
parent 7126f01a79
commit 7fed66e496

View File

@ -28,7 +28,9 @@
#include <asm/processor.h> #include <asm/processor.h>
struct cpuinfo_x86 boot_cpu_data; struct cpuinfo_x86 boot_cpu_data;
bool force; extern void init_amd_nbs(void);
#define KERNEL_SPACE 0x80000000
/* CPUID function 0x80000001, ebx */ /* CPUID function 0x80000001, ebx */
#define CPUID_PKGTYPE_MASK GENMASK(31, 28) #define CPUID_PKGTYPE_MASK GENMASK(31, 28)
@ -166,7 +168,6 @@ long get_raw_temp(struct k10temp_data *data)
{ {
u32 regval; u32 regval;
long temp; long temp;
//printk("b30\n");
data->read_tempreg(data->pdev, &regval); data->read_tempreg(data->pdev, &regval);
temp = (regval >> ZEN_CUR_TEMP_SHIFT) * 125; temp = (regval >> ZEN_CUR_TEMP_SHIFT) * 125;
if (regval & data->temp_adjust_mask) if (regval & data->temp_adjust_mask)
@ -534,19 +535,21 @@ void read_all_info(struct device* dev){
} }
int __stdcall service_proc(ioctl_t *my_ctl){ int __stdcall service_proc(ioctl_t *my_ctl){
if(!my_ctl || !my_ctl->output){ if(!my_ctl || !my_ctl->output || (int)my_ctl->output>=KERNEL_SPACE-sizeof(k10temp_out)){
return 1; printk("k10temp: Bad address for writing data!\n");
return 0;
} }
read_all_info(&k10temp_device); read_all_info(&k10temp_device);
if(my_ctl->out_size == sizeof(k10temp_out)){ if(my_ctl->out_size == sizeof(k10temp_out)){
memcpy(my_ctl->output, &k10temp_out, sizeof(k10temp_out)); memcpy(my_ctl->output, &k10temp_out, sizeof(k10temp_out));
return 0; return 0;
} }
printk("k10temp: Invalid buffer length!\n");
return 1; return 1;
} }
extern void init_amd_nbs(void);
uint32_t drvEntry(int action, char *cmdline){ uint32_t drvEntry(int action, char *cmdline){
if(action != 1){ if(action != 1){
return 0; return 0;
@ -560,14 +563,14 @@ uint32_t drvEntry(int action, char *cmdline){
err = enum_pci_devices(); err = enum_pci_devices();
if(unlikely(err != 0)) { if(unlikely(err != 0)) {
printk("k10temp: Device enumeration failed!\n"); printk("k10temp: Device enumeration failed!\n");
return -1; return 0;
} }
k10temp_id = find_pci_device(&device, k10temp_id_table); k10temp_id = find_pci_device(&device, k10temp_id_table);
if(unlikely(k10temp_id == NULL)){ if(unlikely(k10temp_id == NULL)){
printk("k10temp: Device not found!\n"); printk("k10temp: Device not found!\n");
return -ENODEV; return 0;
} }
init_amd_nbs(); init_amd_nbs();