Thread (3 messages) 3 messages, 3 authors, 2011-02-27

Practical character driver

From: Peter Teoh <hidden>
Date: 2011-02-27 09:22:44

i think pointer can always be localized, as when then pointer is lost, the
memory allocated is still always there, and moreover, the pointer is kept in
a structure.   more likely is a compilation detected error:   when i
compiled it tell me exactly which lines is not initialized:

  CC [M]  drivers/mymodule/mymem1.o
drivers/mymodule/mymem1.c: In function ?mem_read?:
drivers/mymodule/mymem1.c:98: warning: ISO C90 forbids mixed declarations
and code
drivers/mymodule/mymem1.c: In function ?mem_write?:
drivers/mymodule/mymem1.c:125: warning: ISO C90 forbids mixed declarations
and code
drivers/mymodule/mymem1.c: In function ?module_initial?:
drivers/mymodule/mymem1.c:207: warning: ?memory? may be used uninitialized
in this function

which is exactly the following:

  memset(device, 0, sizeof(char) * map_size);

  memory->device = device;================> (memory is unitialized)

correct?    sorry if i am wrong....

On Sun, Feb 27, 2011 at 3:52 PM, Mulyadi Santosa
[off-list ref]wrote:
On Sun, Feb 27, 2011 at 11:57, Sameer Rahmani [off-list ref] wrote:
quoted
static int __init module_initial(void)
{
  dev_t dev;
  int result;
  struct memmap *memory;

  if (major)
    {
      dev = MKDEV(major, minor);
      result = register_chrdev_region(dev, 1, "memchar");
    }
  else
    {
      result = alloc_chrdev_region(&dev, minor, 1,
                   "memchar");
      major = MAJOR(dev);

    }
  if (result < 0)
    {
      printk (KERN_ALERT "Cannot register major number.\n");
      return result;
    }

  device = kmalloc(sizeof(char) * map_size, GFP_KERNEL);
  if (! device)
    {
      printk (KERN_ALERT "Allocating device failed.\n");
      result = -ENOMEM;
      goto fail;
    }


  memset(device, 0, sizeof(char) * map_size);

  memory->device = device;
  mem_setup_cdev(memory);


  printk(KERN_ALERT "Major: %d", major);
  return 0;

 fail:
  module_cleanup();
  return result;
}
As you can see by yourself, you put many data structures as locals to
module_init. So once module_init is thrashed, those variables/pointers
also gone. Result? Easy to guess...lost reference :)

--
regards,

Mulyadi Santosa
Freelance Linux trainer and consultant

blog: the-hydra.blogspot.com
training: mulyaditraining.blogspot.com

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies at kernelnewbies.org
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies


-- 
Regards,
Peter Teoh
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20110227/bd65c113/attachment-0001.html 
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help