What is the definition of structure you are using?I doubt it is just a char* inside the structure.
I feel you can convert the buffer variable into some element of the structure but not to an instance of the structure itself.
the problem here is that BSDFParam_area_light in the conversion is being converted to the wrong address space. The correct casting would be as follows:
BSDFParam_area_light bsdf = *((constant BSDFParam_area_light*)buffer);
That's right !!!